有人知道如何在Node.js中打印堆栈跟踪吗?
当前回答
任何Error对象都有一个堆栈成员,该成员捕获了构造它的点。
var stack = new Error().stack
console.log( stack )
或者更简单地说:
console.trace("Here I am!")
其他回答
尝试错误。captureStackTrace (constructorOpt targetObject[])。
const myObj = {};
function c() {
// pass
}
function b() {
Error.captureStackTrace(myObj)
c()
}
function a() {
b()
}
a()
console.log(myObj.stack)
函数a和b在错误堆栈中被捕获并存储在myObj中。
任何Error对象都有一个堆栈成员,该成员捕获了构造它的点。
var stack = new Error().stack
console.log( stack )
或者更简单地说:
console.trace("Here I am!")
现在主机上有一个专门的功能:
console.trace()
@isaacs的答案是正确的,但如果你需要更具体或更清晰的错误堆栈,你可以使用这个函数:
function getCleanerStack() {
var err = new Error();
Error.captureStackTrace(err, getCleanerStack);
return err.stack;
}
这个功能的灵感直接来自控制台。NodeJS中的trace函数。
源代码:最新版本或旧版本。
如上所述,您可以简单地使用trace命令:
console.trace("I am here");
但是,如果您遇到这个问题时正在搜索如何记录异常的堆栈跟踪,则可以简单地记录exception对象。
try {
// if something unexpected
throw new Error("Something unexpected has occurred.");
} catch (e) {
console.error(e);
}
它将记录:
错误:发生了意想不到的事情。 at main (c:\Users\Me\Documents\MyApp\app.js:9:15) 在对象。用户(c: \ \我的文档\ \ MyApp \ app.js: 1) 在模块。_compile (module.js 460:26): at Object.Module._extensions. js (module.js:478:10) 在模块。负载(module.js 355:32): 在Function.Module。_load (module.js 310:12): Function.Module.runMain (module.js:501:10) 在启动(node.js:129:16) 在node . js: 814:3
如果你的Node.js版本小于6.0.0,记录Exception对象是不够的。在这种情况下,它只打印:
[错误:发生了意想不到的事情。]
对于Node版本< 6,使用console.error(e.stack)而不是console.error(e)来打印错误消息加上完整的堆栈,就像当前Node版本那样。
注意:如果异常创建为像throw "myException"这样的字符串,则不可能检索堆栈跟踪并记录e.stack的结果为undefined。
为了安全起见,你可以使用
console.error(e.stack || e);
它适用于旧版本和新版本的Node.js。