1. ホーム
  2. ジャバスクリプト

[解決済み】例外をスローしたときにJavaScriptのスタックトレースを取得するにはどうすればよいですか?

2022-03-23 03:24:38

質問

もし私自身がJavaScriptの例外をスローした場合(例. throw "AArrggg" ) 、スタックトレースを(Firebugなどで)取得するにはどうしたらよいでしょうか? 今はメッセージが表示されるだけです。

編集 : 以下の多くの方が投稿されているように、スタックトレースを取得することで JavaScript の例外 のスタックトレースを取得したいのですが 私の の例外が発生します。 例えば

function foo() {
    bar(2);
}
function bar(n) {
    if (n < 2)
        throw "Oh no! 'n' is too small!"
    bar(n-1);
}

いつ foo が呼び出されたときに、そのスタックトレースを取得したいのですが、それには foo , bar , bar .

解決方法は?

編集2(2017年)。

すべてのモダンブラウザで、単に呼び出すことができます。 console.trace(); (MDNリファレンス)

編集1(2013年)。

元の質問に対するコメントで指摘されている、より良い(そしてよりシンプルな)解決方法は stack プロパティは Error オブジェクトのようになります。

function stackTrace() {
    var err = new Error();
    return err.stack;
}

すると、次のような出力が得られます。

DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44
DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9
.success@http://localhost:49573/:462
x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
.send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6

URLやその呼び出し関数などとともに、呼び出し関数名を与えること。

オリジナル(2009年)。

の修正版です。 このスニペット は、多少なりとも役に立つかもしれません。

function stacktrace() { 
  function st2(f) {
    return !f ? [] : 
        st2(f.caller).concat([f.toString().split('(')[0].substring(9) + '(' + f.arguments.join(',') + ')']);
  }
  return st2(arguments.callee.caller);
}