5

我注意到对于 Firefox/Firebug(我的主要开发环境),一些错误会产生堆栈跟踪,而另一些则不会。起初我认为这与我是否生成了错误(例如 new Error("foo"))或 Javascript 是否生成了它(例如 undefinedFoo += 1)有关,但我注意到这两种类型都发生了的错误。

所以,我的问题是,有人知道这是什么原因吗?它是随机的还是有一些模式/逻辑?只是 Firefox 和/或 Firebug 蹩脚还是其他浏览器也这样做?最重要的是,我能做些什么来控制它(特别是让它总是给我堆栈跟踪)?

这不是一个关键问题(因为我总是可以在发生错误的任何行之前抛出一个“console.trace()”),但我很好奇是否有人知道答案。

**********编辑**********

我找到了这个线程: http ://groups.google.com/group/firebug/browse_thread/thread/1f32df8b96ec1d30/64b9074cb99056c2? pli=1 其中提到如果错误不是一个实例,Firefox 不会为 Firebug 提供堆栈跟踪错误。换句话说,如果你抛出一些不是 new Error("foo") 的东西,你将不会得到堆栈跟踪。

但是,这对我没有帮助,因为即使我抛出新的 Error(),我也没有看到堆栈跟踪。

4

1 回答 1

2

我找到了!事实证明,模块模式是问题所在。这是一个简单的例子:

var OuterModule = (function(module){
    module.throwError = function() {
        throw new Error("This has no stack trace!");
    };
    return module;
})({});
OuterModule.throwError();

由于某种原因,由于模块模式将 throwError 函数隐藏在模块范围内,Firebug/Firefox 无法正确跟踪它。

永远也想明白的人;希望其他人会从我的痛苦中受益:-)

于 2012-04-11T01:07:25.500 回答