Javascript异常堆栈跟踪

IT技术 javascript exception
2021-03-04 20:16:56

在 Firefox 中,我可以使用exception.stack.

有没有办法在其他浏览器中获得它?

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

5个回答

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

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

注意:我在Chrome 24Firefox 18上测试过

可能也值得一看这个工具

Sweet - 我使用 onerror 的组合来获取行号,然后用 try catch 和您的建议将违规行包装起来,以提醒堆栈跟踪返回给用户。` window.onerror = function(message, url, lineNumber) { alert('message: ' + message + ' - url: ' + url + ' - ln: ' + lineNumber); 返回真;}; ` 然后将其包装以打印出堆栈跟踪。` try { // 一些导致异常的代码。} catch(e) { alert(new Error().stack); }`
2021-04-25 20:16:56
不知何故死亡只给我堆栈的第一行。我究竟做错了什么??即:函数 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"
2021-05-03 20:16:56
没关系,找到问题了。由于它已经是一个错误,我可以这样做:function foo() { fdasmkl } try { foo() } catch(e) { console.log(e.stack) }立即
2021-05-16 20:16:56

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

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

从那个帖子:

链接已损坏,但我认为这里有一个副本pjh0718.blogspot.com/2016/02/...
2021-05-06 20:16:56
比仅仅为了查看其堆栈而创建异常要方便得多。
2021-05-19 20:16:56

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

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

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

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

[披露] 我在 Atatus 工作。

当链接到您自己的网站或内容(或您从属的内容)时,您必须在答案披露您的从属关系,以免被视为垃圾邮件。根据 Stack Exchange 政策,在您的用户名中包含与 URL 相同的文本或在您的个人资料中提及它不被视为充分披露。
2021-05-16 20:16:56

不是真的,至少不容易。

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