gpt4 book ai didi

javascript - 我的网站老是 IE 崩溃,无法调试

转载 作者:数据小太阳 更新时间:2023-10-29 04:43:11 26 4
gpt4 key购买 nike

我有一个网站突然开始崩溃 Internet Explorer。

网站加载并开始执行 javascript,但在某处机器爆炸了。我什至没有收到脚本错误,它只是崩溃了。我尝试使用内置调试器手动单步执行 js 的每一行,但当然问题不会发生。

如果我选择在应用程序崩溃时对其进行调试,我会看到以下消息。

iexplore.exe 中 0x6c5dedf5 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000090。

调用堆栈中的前 5 项如下所示

VGX.dll!6c5dedf5()
[Frames below may be incorrect and/or missing, no symbols loaded for VGX.dll]
VGX.dll!6c594d70()
VGX.dll!6c594f63()
VGX.dll!6c595350()
VGX.dll!6c58f5e3()
mshtml.dll!6f88dd17()

VGX.dll 似乎是 vml 渲染器的一部分,实际上我正在使用 VML。我并不感到惊讶,因为我在使用 vml 时遇到了很多问题,属性必须按特定顺序设置,有时当你将元素附加到 dom 时你不能设置属性,反之亦然(顺便说一句,所有未记录的东西)但是问题通常可以在调试时重现,但现在不行:(

无插件模式下也会出现该问题。

有没有比反复试验更好的方法来解决这个问题?

编辑:添加一个控制台,输出对 DOM 的每一个可疑修改,使得这个问题只是偶尔发生。 (控制台也在同一页面上用 javascript 实现,即使在崩溃后我也能看到输出,因为窗口仍然可见)显然这似乎是某种竞争条件。

我设法进一步追踪它,当您在刚刚添加一个对象后过快地从 DOM 中删除它时,它似乎会发生。 (很可能只适用于具有某些特殊属性的 vml 元素,没有进一步尝试)并且不能通过在 removeChild 前面添加死循环来修复(无论如何都是非常糟糕的解决方案),页面必须由浏览器在addChild 之后就可以调用removeChild 了。叹息

最佳答案

(老问题但很重要)

我有一个非常相似的问题 - 包括很多复杂的 VML(来自 Raphael),而且它看起来几乎无法调试。

事实上,事实证明最简单的低技术方法是最好的。这是一个显而易见的方法:我写在这里是因为有时当面对一个令人生畏的问题时,人们最后才想到明显、简单的解决方案。

所以,简单的老式调试:很多alert("1");, alert("2"); 等在每次远程要求或之后在我的代码中进行复杂的调用,提供 super 简单可靠的断点,这些断点不依赖于任何可能自行崩溃的功能(例如开发人员工具)。然后,只需在它崩溃之前查看您得到的是哪个数字警报——问题一定出现在该警报和下一个警报之间。

添加更多警报,直到您将其缩小到确切的行。在我的例子中,它实际上与复杂的 VML 无关 - 它是一个 for 循环,由于某种原因只在 IE7 上无限继续。

关于javascript - 我的网站老是 IE 崩溃,无法调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3948913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com