gpt4 book ai didi

javascript - 为什么 window.onerror 不能捕获 IE9 中的堆栈溢出错误?

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

我正在使用 window.onerror 来捕获和记录客户端错误。我已经阅读了有关此方法的各种注意事项,但我无法找到有关此特定案例的任何信息。

出于某种原因,IE9 似乎没有捕获堆栈溢出异常。下面的示例在 Chrome 和 Firefox 中运行时以及我在 IE9 中使用 devtools 并将浏览器模式设置为 IE8 或 IE7 时捕获了两个错误。但是,在IE9模式下运行时,只捕获到'test' is undefined异常,而忽略堆栈溢出异常。

我举了一个简单的例子来证明这一点:

window.onerror = errorHandler;

function errorHandler (msg) {
alert(msg);
}

setTimeout(function () {
test.test = "test";
}, 1000);

setTimeout(function stackoverflow() {
stackoverflow();
}, 2000);

这也是一个工作示例:http://jsfiddle.net/Mzvbk/1/

谁能解释一下这是为什么?

2012 年 8 月 29 日更新

我在 Internet Explorer Developer Center 上发布了这个问题也一样,但到目前为止,它并没有给我太多帮助。

在这一点上,最好的猜测(正如@RyanKinal 在他的评论中所建议的那样)是由于超出了调用堆栈大小,因此没有空间将对错误处理程序的调用放在堆栈上。

我仍然愿意相信错误处理是与普通堆栈分开处理的,因为它似乎在其他浏览器(甚至是旧版本的 IE)中,但如果不是这样,那么很高兴看到某种引用、错误报告或声明,表明这实际上是 IE9 的情况。

2012 年 9 月 5 日更新

正如 Ren 和 Vega 在他们的评论中所描述的,Firefox 15 有时(看似随机)似乎也吞下了这个异常。

最佳答案

您是否尝试过在浏览器上禁用脚本调试?

A common problem that bites many developers occurs when their onerror handler is not called because they have script debugging enabled for Internet Explorer. This will be the case by default if you have installed the Microsoft Script Debugger or Microsoft Visual Studio 6.0® (specifically Visual InterDev 6.0™)—onerror handling is how these products launch their debugger.

Source (包括有关如何禁用它的详细信息)。


评论后的附加信息:

那我想知道是不是和这个有关:

Internet Explorer 9 is compiled with the new C++ compiler provided with Visual Studio 2010. This compiler includes a feature known as Enhanced GS aka Stack Buffer Overrun Detection, which helps prevent stack buffer overruns by detecting stack corruption and avoiding execution if such corruption is encountered.

(Source)

听起来它可能是在溢出之前停止作为一种保护机制?

关于javascript - 为什么 window.onerror 不能捕获 IE9 中的堆栈溢出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044155/

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