自分で 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
ベストアンサー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);
}