Get current stack trace in JavaScript
如何从JavaScript打印堆栈跟踪?
答案如何在抛出异常时获取Javascript堆栈跟踪? 处理抛出异常,但我需要打印堆栈跟踪来调试内存泄漏。
基本上我有一个相同的问题,如在Java中获取当前堆栈跟踪,但对于JavaScript。
以及如何在Node.js中打印堆栈跟踪? 是类似的,但它是Node.js,我想知道JavaScript,更一般地说,如果它是不同的。
-
你在接受的答案中看到stackTrace功能了吗?归结为var e = new Error(); console.log(e.stack)
-
谢谢迈克,但我想要一个页面,在stackoverflow上有一个简单直接的答案,谷歌会为查询"JavaScript打印堆栈跟踪"编制索引。
-
但它仍然是一个重复的问题,对吗?难道你不能在这里发布你的答案作为这个问题的答案吗?谷歌搜索"JavaScript打印堆栈跟踪"提出了上一个问题作为第一个结果,即使我走出我的"谷歌泡沫"。
-
迈克,这个问题与发生异常时打印堆栈跟踪有关。我的问题与例外无关。背景不同。
-
值得商榷。问题是以这种方式表达的,但大多数答案都是以这样的方式推广的,即你可以在没有错误处理的情况下获得堆栈跟踪。无论如何,我不会将其标记为副本,因为在这种情况下我不想成为唯一的事实来源,因为存在反对它的论点。我只想说如果有人决定将其标记为副本,我不会感到惊讶。
-
调试javascript时可能重复,有没有办法提醒当前的调用堆栈?
这行代码获取堆栈跟踪并打印出来:
资料来源:https://developer.mozilla.org/en-US/docs/Web/API/Console/trace
-
@SYOBSYOT回答你自己的问题是完全可以接受和鼓励的。 stackoverflow.com/help/self-answer
-
大约10年前正式采用了控制台API - 任何仍然不支持它的JS引擎在这样的问题时都可以安全地被忽略:console.trace()是默认的正确答案,没有其他细节。"我如何在这个高度利基,超传统的JS引擎中做X"。
您可以通过创建错误并打印其stack属性来获取堆栈跟踪。
这与console.trace()不同,即使console类在您的环境中不可用,也适用于所有情况。 (当然,如果print不可用,您可以使用console.log或任何其他功能在您的环境中进行打印)。
-
Node.js没有print,因此您的代码在问题的上下文中不起作用,而console.trace()从第一个版本开始就在Node.js中起作用。
-
print就在这里。这只是一个例子。 Error().stack是重要的一部分。此外,问题提问者在他的问题中表示他希望比node.js答案更通用。所以上下文不仅限于node.js.比node.js更常见的是,您可以通过Error().stack执行此操作,并使用您可用的任何功能打印其输出。 Error().stack适用于任何JavaScript版本,而console.trace()则不适用。另外,如果你这样做,你可以在node.js中使print工作:print=console.log。
-
最后一句是完整的原因,这是一个错误的答案:支持ES5或更高版本的所有内容都支持console.trace(),而你的答案显示的代码不能在任何浏览器中运行,也不能在Node.js中运行 - 如果你想提及的话new Error().stack然后通过各种方式将其作为答案的第二部分添加。就目前而言,您发布的答案在任何常见的JS引擎中都不起作用,因此这是一个糟糕的答案。记住为什么SO首先存在:如果答案中包含代码应该有效的代码