我有一个页面,其中运行了大量的JavaScript代码。仅在Internet Explorer中,只有版本8,我得到一个长脚本警告,我可以可靠地重现。我怀疑是事件处理程序在无限循环中触发它们。
开发人员工具在脚本运行的重压下可怕地跛行,但我似乎能够让日志告诉我当我中止它时执行的脚本行,但它不可避免地有些深我们使用的ExtJS代码的管道,我无法分辨我的代码堆栈中的位置。
查看调用堆栈的方法是可行的,但是当我得到长脚本警告时,我希望能够闯入调试器,这样我就可以直接进入堆栈。
发布了一个类似的问题,但给出的答案是针对一个非正确的工具,或者是对于无限循环的二进制搜索,一次消除我的一半代码的非常有用的建议。如果我的代码很简单,我可以做到这一点,它可能不会首先得到无限循环。如果我可以在Firebug中重现问题,我也可能会更开心。
答案 0 :(得分:3)
以下是我要做的事情:
转到http://www.microsoft.com/whdc/devtools/debugging/default.mspx并安装Windows调试工具。您希望在安装WinDBG时运行它。
按照http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a中列出的步骤设置符号服务器连接,并将符号自动下载到本地驱动器(c:\ websymbols - 或其他)。
在WinDBG下运行IEXPLORE.EXE。如有必要,帮助文件应该为您提供帮助。一旦你运行Internet Explorer等,你需要几个命令。首先,继续进行大型脚本。
进入调试器(CTRL-SCROLLLOCK中断)
一个。执行LN
到“最近列表”以获取加载的DLL文件。希望你能在内存中加载JSCRIPT.DLL
湾键入.reload /f
以强制重新加载所有符号。这需要一段时间。现在,完成此操作后,再次键入LN
,您应该会看到正确的JSCRIPT.PDB已经下载到您之前设置的符号目录中的系统。
根据你想要做什么,你可能需要重新启动调试器,但是你可以这样做:在WINDBG加载的初始中断之后,你可以输入“sxe ld jscript.dll”它会破坏当jscript.dll
加载时。
这是一个棘手的部分,因为一旦加载,你就没有jscript.dll
的代码,但你有正确的符号(如果它们没有加载,那么用{{重新加载它们) 1}})。您可以通过输入“x!jscript”查看可用的功能,然后您将获得所有功能和变量的完整列表。
选择一个,设置一个断点,然后您应该能够跟踪脚本发生的情况。
如果没有其他任何操作,使用.reload /f
,您可以获得系统上加载的相应.reload /f process
个文件。您可以将这些与Visual Studio结合使用,以这种方式进行额外的调试,但我不太确定它的效果如何。
答案 1 :(得分:0)
我以前遇到过这个问题,并且在使用Visual Studio启用开发人员工具方面有一些运气。遇到错误时,页面加载停止,然后我可以加载Visual Studio以查看导致问题的特定行。
此站点提供了有关使用Visual Studio和Internet Explorer调试器的一些信息: Using Visual Studio to Debug JavaScript in IE