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") 以外をスローすると、スタックトレースは取得されません。

ただし、 new 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 に答える