如果我自己抛出一个 JavaScript 异常(例如,throw "AArrggg"),我如何获得堆栈跟踪(在 Firebug 中或其他中)?现在我刚刚收到消息。
throw "AArrggg"
编辑 :正如下面许多人发布的那样,可以获得 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。
foo
bar
编辑 2(2017 年):
在所有现代浏览器中,您可以简单地调用:console.trace(); (MDN 参考)
console.trace();
编辑 1 (2013):
正如对原始问题的评论中指出的那样,一个更好(和更简单)的解决方案是使用对象的stack属性,Error如下所示:
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); }