javascript - 引发异常时如何获取JavaScript堆栈跟踪?

标签 javascript stack-trace

如果我自己抛出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的调用。

最佳答案

编辑2(2017):

在所有现代浏览器中,您都可以简单地调用:console.trace(); (MDN Reference)

编辑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):

修改后的this snippet可能会有所帮助:

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

关于javascript - 引发异常时如何获取JavaScript堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57985125/

相关文章:

javascript - 循环遍历 xml2js 解析的 json 项时无法访问 xml 属性

javascript - 如何将标记放置在图像顶部,并根据图像给出标记的位置?

javascript - 使用 Java Servlet 的 URL 路由

javascript - 将 jQuery 缩放效果与翻杂志的 Javascript 集成

c++ - 以编程方式记录 C++ 中函数的调用者

python打印所有函数调用以了解脚本流程

java - 在 Java 中伪造堆栈跟踪

c# - 来自动态代码的异常堆栈跟踪中的文件路径和行号错误

java - 尽管没有访问任何越界索引,但出现异常 "ArrayOutOfBounds:1"

javascript - 如何在react-router中创建 `/orders/:id/detail`路径