调试Internet Explorer 9-10崩溃问题

4
我是一位新的网站开发者。之前的开发者留下了许多垃圾代码和不稳定的代码。但主要问题是,当我打开这个网站并尝试浏览页面(只尝试1-2个链接)时,它会导致我的IE 9-10崩溃。 打开页面后,IE完全冻结,我无法在其中进行任何操作。 我的问题是:
如何跟踪问题(可能是某种调试器或在线模拟器)?您能推荐一些软件或在线工具来跟踪JS / HTML错误,以便我可以了解崩溃原因吗?

首先,浏览器内置了调试器。 - Pointy
打开页面后,IE完全冻结,我无法在其中进行任何操作。 - freento
3
将脚本注释掉,然后逐个重新启用,直到找出导致问题的脚本。进入该文件并将一块块代码注释掉,直到定位出问题发生的区域。 - epascarello
是的,这是很好的建议,唯一的问题是它可以节省很多时间。 - freento
@magalter您能否向我们更新进展情况?问题最终是什么导致的呢? - Benjamin Gruenbaum
1
问题出在 AJAX 响应及其页面位置上。如果 AJAX 弹出框足够大且无法适应页面高度,则可能会导致 IE 崩溃。不幸的是,我没有时间在空白页面上重现此问题。看起来这是一种 IE 的 bug。解决方法是将 AJAX 弹出框中的 HTML 移动到更高的位置,以便完全适应页面高度。 - freento
1个回答

13

好问题!

所以!你的网站在IE中崩溃,这是我之前遇到过几次的痛苦问题。这并不好玩,也不要期望有什么一劳永逸的解决方案,欣慰的是你不是第一个遇到这个问题的人。

你可以使用Visual Studio调试IE。Visual Studio允许您在Internet Explorer中运行特定的脚本语句、使用断点和运行特定的代码片段。

如果你觉得这太极端了,IE附带开发者工具。但是,如果IE导致你的网站崩溃,我怀疑开发者工具也没有任何帮助。可能会更快地导致崩溃。

以下是一些调试引起浏览器崩溃的代码的技巧:

  • 禁用JavaScript是否持续?如果是,请逐个删除资源。

  • 如果禁用JavaScript解决了你的问题,请逐个启用脚本文件。(将其他文件发送到虚假URL。追踪给你带来问题的那个文件。

  • 使用alert语句,它们是阻塞的,因此在它们工作时不会在后台运行任何代码(除非使用像WebWorkers之类的东西),它们不需要任何额外的工具,虽然有点凌乱,但它们是你可以做的最可靠的事情。你可以把它们放在DOM的中间,它们会阻塞DOM的渲染,使你能够准确地发现问题所在。

  • 添加同步AJAX调用,虽然通常我严格反对滥用AJAX,但你可以在服务器上编写一个小型记录器,接受这些调用并进行日志记录。这将让你使用日志记录。

  • 了解问题咨询的去处!在询问即使是像StackOverflow这样好的资源都无法解决的IE相关奇怪问题时,一个很好的资源是IE博客。IE开发团队会在那里回复评论,你可以直接问像“为什么我的网站不能运行”这样的问题。

  • 找到问题后别忘了提交bug报告!你也希望开发人员对你的问题采取同样的方式。

  • 2
    @magalter 我不会给你鱼,而是教你如何钓鱼 :) 未来IE有可能会崩溃你所工作的网站。学会使用 alert语句,禁用脚本等进行繁琐的调试过程非常重要。一旦你变得擅长它,就会变得不那么痛苦。这也是教育性的,因为它强迫你编写模块化代码,并对你的代码进行严格的单元和集成测试。我以前也处于你的位置,必须修复不能在IE中运行的破损代码,这很糟糕,但是有效地处理它使我成为了一个更好的开发人员。 - Benjamin Gruenbaum
    2
    那是一个非常好的答案。当需要时,我会指向同事们。 - Florian Margaine
    问题是IE彻底崩溃了(* IE完全冻结,我无法在其中执行任何操作)。 因此,我无法在其中进行提示等操作。 我只能完全禁用JS(注释所有代码),然后取消注释部分并跟踪IE是否不会崩溃。 这就是我现在正在做的 :) - freento
    5
    我想说的是,不要逐个取消注释所有脚本,这将需要O(n)时间,而是可以在头部区域放置 <script type="text/javascript">i=0</script> ,然后在每个脚本标签之间添加 <script type='text/javascript'> alert(i++)</script> ,这样一来,在调试时只需O(1)时间,因为您可以一次性发现哪个脚本出了问题。 - Benjamin Gruenbaum

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接