javascript - 我能否让 Internet Explorer 调试器中断长时间运行的 JavaScript 代码?

标签 javascript internet-explorer debugging

我有一个页面正在运行大量的 JavaScript 代码。仅在 Internet Explorer 中,并且仅在版本 8 中,我收到一个长脚本警告,我可以可靠地重现。我怀疑是事件处理程序在无限循环中触发了自己。

开发人员工具在脚本运行的重压下严重瘫痪,但我似乎确实能够得到日志,告诉我当我中止时它正在执行哪一行脚本,但这不可避免地是一些深层次的管道的ExtJS我们使用的代码,但我不知道它在我的代码堆栈中的什么位置。

一种查看调用堆栈的方法可行,但我希望能够在收到长脚本警告时直接进入调试器,这样我就可以单步执行调用堆栈。

发布了一个类似的问题,但给出的答案是针对一个不正确的工具,或者是在二进制搜索无限循环时一次消除一半代码的不是很有帮助的建议。如果我的代码足够简单,我可以做到这一点,它可能一开始就不会出现无限循环。如果我可以在 Firebug 中重现问题,我可能也会更快乐。

最佳答案

这是我会做的:

  1. 转到 http://www.microsoft.com/whdc/devtools/debugging/default.mspx并安装 Windows 调试工具。您想在安装时运行 WinDBG。

  2. 按照 http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a 中列出的步骤进行操作设置符号服务器连接并将符号自动下载到您的本地驱动器(c:\websymbols -- 或其他)。

  3. 在 WinDBG 下运行 IEXPLORE.EXE。如有必要,帮助文件应该会在这方面为您提供帮助。一旦您运行 Internet Explorer 等,您需要几个命令。首先,继续执行大型脚本。

  4. 进入调试器(CTRL-SCROLLLOCK 中断)。
    一种。执行 LN 以“列出最近的”以获取加载的 DLL 文件。希望您会在内存中加载 JSCRIPT.DLL。
    b.键入 .reload/f 以强制重新加载所有符号。这需要一段时间。现在,完成此操作后,再次键入 LN,您应该会看到正确的 JSCRIPT.PDB 已下载到系统中您之前设置的符号目录中。

  5. 根据您想要执行的操作,您可能需要重新启动调试器,但您可以这样做:在 WINDBG 加载初始中断后,您可以键入“sxe ld jscript.dll”,它将中断当 jscript.dll 加载时。

  6. 这是棘手的部分,因为一旦加载,您就没有 jscript.dll 的代码,但是您有正确的符号(如果它们没有加载,那么使用 .reload/f 重新加载它们)。您可以通过键入“x!jscript”查看可用函数,您将获得所有函数和变量的完整列表。

  7. 选择一个,设置一个断点,然后您应该能够跟踪您的脚本发生了什么。

  8. 如果没有完成其他任何事情,通过使用 .reload/f 过程,您可以在您的系统上加载适当的 jscript.pdb 文件。您可以将它们与 Visual Studio 结合使用,以这种方式进行额外的调试,但我不确定它的效果如何。

关于javascript - 我能否让 Internet Explorer 调试器中断长时间运行的 JavaScript 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2473565/

相关文章:

javascript - 为什么 IE8 用 Ja​​vaScript 渲染页面无法使用,而 FF 却表现良好?

javascript - BestBuy 网站上 Internet Explorer 8 中非常奇怪的极端情况行为

django - 在 Django 中退出调试时不会加载静态文件

javascript - 如何为 ajax 模式弹出窗口创建后备

javascript - JQuery ui - 日期选择器、日期格式

javascript - 带有阿拉伯语语言环境的 moment.js 年/数字格式

JavaScript 表单验证在 IE8 中不起作用

javascript - 需要 Node 模块 var 或 const 的最佳方式是什么?

html - 使用 :hover and :hover:first-letter 时,CSS 动画在 IE 中不起作用

android-studio - 断点不属于任何类