使用Firefox / Firebug,为什么只有一些错误才能获得Stacktraces

时间:2012-04-06 18:29:17

标签: firebug stack-trace

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

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

这不是一个至关重要的问题(因为我总是会在错误发生的任何行之前抛出" console.trace()"但我很好奇,如果有人知道答案。

********** EDIT **********

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

永远琢磨的男人;希望其他人能从我的痛苦中受益: - )