例外をスローしたときに JavaScript スタック トレースを取得するにはどうすればよいでしょうか? 質問する

例外をスローしたときに JavaScript スタック トレースを取得するにはどうすればよいでしょうか? 質問する

自分で 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呼び出しを含むスタック トレースを取得したいと思います。foobarbar

ベストアンサー1

編集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);
}

おすすめ記事