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

mac*_*ost 5 firebug stack-trace

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

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

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

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

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

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

mac*_*ost 2

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

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

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

一个花了很长时间才弄清楚的人;希望其他人能从我的痛苦中受益:-)