在JavaScript中打印当前堆栈跟踪

在JavaScript中打印当前堆栈跟踪,javascript,node.js,Javascript,Node.js,如何从JavaScript打印堆栈跟踪 答案是抛出异常,但我需要打印堆栈跟踪以调试内存泄漏 基本上,我的问题与JavaScript相同 与之类似,但它是Node.js,我想知道JavaScript是否不同。这行代码获取堆栈跟踪并打印它: console.trace(); 来源:您可以通过创建错误并打印其堆栈属性来获取堆栈跟踪 var stackTrace = Error().stack; print(stackTrace); // if print is available console.l

如何从JavaScript打印堆栈跟踪

答案是抛出异常,但我需要打印堆栈跟踪以调试内存泄漏

基本上,我的问题与JavaScript相同


与之类似,但它是Node.js,我想知道JavaScript是否不同。

这行代码获取堆栈跟踪并打印它:

console.trace();

来源:

您可以通过创建错误并打印其
堆栈
属性来获取堆栈跟踪

var stackTrace = Error().stack;
print(stackTrace); // if print is available
console.log(stackTrace); // if console.log is available
alert(stackTrace); // ditto
var xhr = new XMLHttpRequest(); xhr.open(...); xhr.send(stackTrace); // submit to server
// or do whatever else with the variable
这与
console.trace()
不同,它适用于所有情况,即使
console
类在您的环境中不可用。(当然,如果
print
不可用,您可以使用
console.log
或您环境中的任何其他打印功能)。

说明可以通过以下方式完成:

const targetObject = {};
Error.captureStackTrace(targetObject);
targetObject.stack;  // Similar to `new Error().stack`

此代码段在targetObject上创建.stack属性,当访问该属性时,返回一个字符串,表示调用
Error.captureStackTrace()
的代码中的位置。

您是否在接受的答案中看到
stackTrace
函数?它归结为
vare=newerror();console.log(e.stack)
谢谢Mike,但我想要一个关于stackoverflow的简单、直接的答案,google会为查询“JavaScript打印堆栈跟踪”建立索引。但这仍然是一个重复的问题,对吗?你不能把你的答案贴在这里作为对那个问题的回答吗?谷歌搜索“JavaScript打印堆栈跟踪”第一个结果就是出现了前面的问题,即使是在我跳出“谷歌泡泡”的时候。Mike,这个问题与发生异常时打印堆栈跟踪有关。我的问题与例外情况无关。上下文是不同的,值得商榷。问题的措辞是这样的,但大多数答案都是以这样一种方式概括的,即您可以在不进行错误处理的情况下获得堆栈跟踪。不管怎样,我不会把它标为复制品,因为我不想成为这个案件中唯一的真相来源,因为有人反对它。我只是想说,如果有人决定将它标记为复制品,我不会感到惊讶。@SYOBSYOT回答你自己的问题是完全可以接受的,并且受到鼓励的。console API在近10年前就被正式采用了——当遇到这样的问题时,任何仍然不支持它的JS引擎都可以被安全地忽略:
console.trace()
是默认的正确答案,没有类似“如何在这个高度利基、超级传统的JS引擎中实现X”这样的额外细节,这个答案实际上并没有回答这个问题。问题是获取当前堆栈跟踪,而不是打印当前堆栈跟踪。打印堆栈跟踪很容易,但获取堆栈跟踪很难。我想知道
var currentStackTrace=/*这里是什么代码的答案*/
@StijndeWitt您可以尝试解析
Error
上的
stack
字段,例如
var currentStackTrace=Error().stack.substring(6).split(“at”)
currentStackTrace
设置为字符串数组,其中每个字符串都是堆栈中的一行。@MichaelOsofsky Yes,但我所说的事实是,这个被接受的答案实际上并没有回答这个问题。目前,问题标题应该改为“在Javascript中打印当前堆栈跟踪”,或者接受的答案应该改为,我们应该从中删除
Print()
调用。Node.js没有
Print
,因此您的代码在问题的上下文中不起作用,而
console.trace()
从第一个版本开始就在Node.js中工作。
打印
与此无关。这只是一个例子<代码>错误()。此外,提问者在他的问题中表示,他希望得到比node.js更一般的答案。因此,上下文不限于node.js。通常,与node.js相比,您可以通过
Error().stack
并使用任何可用的函数打印其输出来实现<代码>错误()。另外,如果您这样做,您可以使
print
在node.js中工作:
print=console.log
。这是一个错误答案的全部原因:支持ES5或更高版本的所有内容都支持
console.trace()
,而您的答案显示的代码在任何浏览器中都无法工作,也不在Node.js中-如果您想提及
newerror().stack
,请务必将其作为答案的第二部分。目前,您发布的答案在任何常见的JS引擎中都不起作用。首先要记住为什么会这样:如果答案中有代码,那么代码应该有效。谢谢你的回答。这对我完全有效!!这是最好的。非常感谢。没有新的真的很好。