Javascript 异常堆栈跟踪

Posted

技术标签:

【中文标题】Javascript 异常堆栈跟踪【英文标题】:Javascript exception stack trace 【发布时间】:2010-09-13 22:57:32 【问题描述】:

在 Firefox 中,我可以使用 exception.stack 获取异常的堆栈跟踪。

有没有办法在其他浏览器中也能做到这一点?

编辑:我实际上想自动保存堆栈跟踪(如果可能的话)而不是当时调试它(即我知道如何在调试器中获取堆栈跟踪)。

【问题讨论】:

【参考方案1】:

您必须尝试优秀的开源库TraceKit,它会尝试为所有主流浏览器中未处理的 javascript 异常创建堆栈跟踪。您可以阅读有关 Tracekit 的更多信息

https://github.com/csnover/TraceKit/

PS:如果您正在寻找具有良好 UI 的服务(使用 Tracekit),您可以尝试Atatus。

[披露]我在 Atatus 工作。

【讨论】:

当链接到您自己的网站或内容(或您附属的内容)时,您must disclose your affiliation in the answer 以免被视为垃圾邮件。根据 Stack Exchange 政策,在您的用户名中包含与 URL 相同的文本或在您的个人资料中提及它不被视为充分披露。【参考方案2】:

如果你想要字符串堆栈跟踪,我会选择 insin 的答案:stacktrace.js。如果您想访问堆栈跟踪的各个部分(行号、文件名等)stackinfo,它实际上在后台使用了 stacktrace.js。

【讨论】:

【参考方案3】:

将此行放在要打印堆栈跟踪的位置:

console.log(new Error().stack);

注意:由我在 Chrome 24Firefox 18

上测试

this tool 也值得一看。

【讨论】:

Sweet - 我使用 onerror 的组合来获取行号,然后用 try catch 和您的建议将有问题的行包装起来,以提醒用户堆栈跟踪。 ` window.onerror = function(message, url, lineNumber) alert('message: ' + message +' - url: ' + url +' - ln: ' + lineNumber);返回真; ; ` 然后包装它以打印出堆栈跟踪。 ` try // 一些导致异常的代码。 catch(e) alert(new Error().stack); ` 不知何故死了只给了我堆栈的第一行。我究竟做错了什么??即:函数 foo() fdasmkl try foo() catch(e) err = new Error(e).stack; console.log(err) =>>> Error: ReferenceError: fdasmkl is not defined at <anonymous>:6:7 而不是 "Error: ReferenceError: fdasmkl is not defined at eval (eval at <anonymous> (:6:1), <anonymous>:1:1) at <anonymous>:6:1" 没关系,找到问题了。由于这已经是一个错误,我可以立即执行:function foo() fdasmkl try foo() catch(e) console.log(e.stack) 【参考方案4】:

Webkit 现在具有提供堆栈跟踪的功能:

Web Inspector: Understanding Stack Traces,由 Yury Semikhatsky 于 2011 年 4 月 20 日星期三上午 7:32 发布 (webkit.org)

来自那个帖子:

【讨论】:

比创建异常只是为了查看它的堆栈要方便得多。 链接失效了,不过我觉得这里有副本pjh0718.blogspot.com/2016/02/…【参考方案5】:

不是真的,至少不容易。

在 IE 中,您可以使用 MS Script Debugger(由于某种原因是 Office 组件)或 Visual Studio 调试浏览器进程,然后您可以在断点处查看堆栈。

【讨论】:

以上是关于Javascript 异常堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章

来自rails 3中therubyracer / v8的javascript错误的堆栈跟踪

获取完整的字符串堆栈跟踪,包括内部异常

为啥没有登录异常堆栈跟踪? [复制]

为啥我的异常堆栈跟踪总是指向最后一个方法行?

Python:异常装饰器。如何保留堆栈跟踪

Ruby 异常处理:反向堆栈跟踪顺序