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 24 和 Firefox 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 异常堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章