有谁知道如何在 Node.js 中打印堆栈跟踪?
如何在 Node.js 中打印堆栈跟踪?
任何Error
对象都有一个stack
成员来捕获它的构造点。
var stack = new Error().stack
console.log( stack )
或更简单地说:
console.trace("Here I am!")
正如已经回答的那样,您可以简单地使用trace命令:
console.trace("I am here");
但是,如果您遇到这个问题是为了搜索如何记录异常的堆栈跟踪,您可以简单地记录 Exception 对象。
try {
// if something unexpected
throw new Error("Something unexpected has occurred.");
} catch (e) {
console.error(e);
}
它会记录:
错误:发生了意外。
在主要 (c:\Users\Me\Documents\MyApp\app.js:9:15)
在对象。(c:\Users\Me\Documents\MyApp\app.js:17:1)
在 Module._compile (module.js:460:26)
在 Object.Module._extensions..js (module.js:478:10) )
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at start (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 版本。
要Error
以更易读的方式在控制台中打印堆栈跟踪:
console.log(ex, ex.stack.split("\n"));
结果示例:
[Error] [ 'Error',
' at repl:1:7',
' at REPLServer.self.eval (repl.js:110:21)',
' at Interface.<anonymous> (repl.js:239:12)',
' at Interface.EventEmitter.emit (events.js:95:17)',
' at Interface._onLine (readline.js:202:10)',
' at Interface._line (readline.js:531:8)',
' at Interface._ttyWrite (readline.js:760:14)',
' at ReadStream.onkeypress (readline.js:99:10)',
' at ReadStream.EventEmitter.emit (events.js:98:17)',
' at emitKey (readline.js:1095:12)' ]