JavaScript异常堆栈跟踪

103

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

其他浏览器是否也有类似的方式可以获取堆栈跟踪呢?

编辑:实际上,我希望能够自动保存堆栈跟踪(如果可能的话),而不是在运行时进行调试(即,我知道如何在调试器中获取堆栈跟踪)。

4个回答

90

将此行放置在您希望打印堆栈跟踪的位置:

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

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

也许值得一看 这个工具


2
很好 - 我使用onerror的组合来获取行号,然后用try catch包装有问题的行和您的建议来向用户警报堆栈跟踪。window.onerror = function(message, url, lineNumber) { alert('message: ' + message + ' - url: ' + url + ' - ln: ' + lineNumber); return true; };然后将其包装以打印出堆栈跟踪。 try { // Some code that is causing the exception. } catch(e) { alert(new Error().stack); } - Philip Murphy
以某种方式死亡,只给我堆栈的第一行。我做错了什么?? 即: function foo() { fdasmkl } try { foo() } catch(e) { err = new Error(e).stack; console.log(err) }=>>> 错误: ReferenceError: fdasmkl 未定义 at <anonymous>:6:7 而不是 "错误: ReferenceError: fdasmkl 未定义 at eval (eval at <anonymous> (:6:1), <anonymous>:1:1) at <anonymous>:6:1" - chitzui
没事了,问题解决了。由于已经是一个错误,我可以这样做:function foo() { fdasmkl } try { foo() } catch(e) { console.log(e.stack) } - chitzui

23

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

Web检查器:了解堆栈跟踪,由Yury Semikhatsky于2011年4月20日上午7:32发布(webkit.org)

从该文章中得知:


1
比起创建异常来查看其堆栈,这种方法更加方便。 - Alex Churchill
链接已经失效,但我认为这里有一份副本 http://pjh0718.blogspot.com/2016/02/web-inspector-understanding-stack-traces.html - Stephen Turner

3
如果你想获取字符串形式的堆栈跟踪信息,我建议使用insin的答案:stacktrace.js。如果你想要访问堆栈跟踪信息的各个部分(如行号、文件名等),可以使用stackinfo,它实际上是在底层使用stacktrace.js。

0

不太容易,至少不是那么简单。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接