如果我自己抛出一个JavaScript异常(例如,throw "AArrggg"),我如何获得堆栈跟踪(在Firebug或其他情况下)?现在我才明白.

edit:正如下面的许多人所说,可以为JavaScript exception获取堆栈跟踪,但我想为my个异常获取堆栈跟踪.例如:

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

当调用foo时,我想得到一个堆栈跟踪,其中包括对foobarbar的调用.

推荐答案

Edit 2 (2017):

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

Edit 1 (2013):

正如在对原始问题的 comments 中指出的,更好(更简单)的解决方案是使用Error对象的stack属性,如下所示:

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、调用函数等.

Original (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相关问答推荐

Angular 拦截器错误处理删除方法问题

Fastify错误:CORS策略已阻止从起源api-dev.example.com上的MLhttp请求

如何从对象嵌套数组的第二级对象中过滤出键

通过实现regex逻辑自定义数据表搜索

如何访问Json返回的ASP.NET Core 6中的导航图像属性

当在select中 Select 选项时,我必须禁用不匹配的 Select

在react JS中映射数组对象的嵌套数据

如何将react—flanet map添加到remixjs应用程序

Prisma具有至少一个值的多对多关系

DOM不自动更新,尽管运行倒计时TS,JS

在不删除代码的情况下禁用Java弹出功能WordPress

如何使用基于promise (非事件emits 器)的方法来传输数据?

每次重新呈现时调用useState initialValue函数

Phaser3 preFX addGlow不支持zoom

使用线性插值法旋转直线以查看鼠标会导致 skip

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

自动滚动功能在当前图像左侧显示上一张图像的一部分

将Singleton实例设置为未定义后的Angular 变量引用持久性行为

如何使用Cypress在IFRAME中打字

如何设置时间选取器的起始值,仅当它获得焦点时?