为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Node.js中打印堆栈跟踪?

如何在Node.js中打印堆栈跟踪?

RISEBY 2019-12-07 16:18:33
有谁知道如何在Node.js中打印堆栈跟踪?
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

任何Error对象都具有stack捕获其构造点的成员。


var stack = new Error().stack

console.log( stack )

或更简单地说:


console.trace("Here I am!")


查看完整回答
反对 回复 2019-12-07
?
白衣非少年

TA贡献1155条经验 获得超0个赞

正如已经回答的那样,您可以简单地使用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

    )

    位于Object.Module._extensions..js(module.js:478:10 )的Module._compile(module.js:460:26))

    在     启动时(node.js

    )

    在Function.Module.runMain(module.js:501:10)

在Function.Module._load(module.js:310:12 )在Module.load(module.js:355:32):129:16),

    位于node.js:814:3



如果您的Node.js版本小于6.0.0,则仅记录Exception对象是不够的。在这种情况下,它将仅打印:


[错误:发生了意外情况。]


对于节点版本<6,使用console.error(e.stack)而不是console.error(e)打印错误消息以及完整的堆栈,就像当前的节点版本一样。



注:如果该异常是因为像字符串创建throw "myException",它无法获取堆栈跟踪和记录e.stack的产量不确定。


为了安全起见,您可以使用


console.error(e.stack || e


查看完整回答
反对 回复 2019-12-07
?
万千封印

TA贡献1891条经验 获得超3个赞

要Error以更易读的方式在控制台中打印stacktrace :


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)' ]


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 1037 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信