如何在node.js中输出深度堆栈跟踪?
当发生正常exception时,输出如下的堆栈跟踪:
util.js:38 case '%s': return String(args[i++]); ^ TypeError: Cannot convert object to primitive value at String (unknown source) at util.js:38:25 at String.replace (native) at Object.<anonymous> (util.js:35:23) at Object.<anonymous> (console.js:25:36) at EventEmitter.<anonymous> (/project/src/routines/debug/boot.js:16:21) at EventEmitter.emit (/project/node_modules/eventemitter2/lib/eventemitter2.js:319:22) at /project/src/bootstrap.js:15:14 at /project/src/util/routineloader.js:36:11 at /project/src/util/routineloader.js:47:6
这是非常有帮助的。 当我然后在以下地方做:
process.on('uncaughtException', function(err) { console.trace(); throw err; });
我只得到:
Trace: at EventEmitter.<anonymous> (/project/src/routines/debug/exceptions.js:4:17) at EventEmitter.emit (events.js:88:20)
这根本没有帮助。
我如何使它像原来的一样返回整个堆栈跟踪?
你快到了:
process.on('uncaughtException', function(err) { console.log(err.stack); throw err; }); function foo() { throw new Error("HI. I'm an error."); } foo(); /* Prints Error: HI. I'm an error. at foo (/Users/rye/Desktop/test.js:7:9) at Object.<anonymous> (/Users/rye/Desktop/test.js:10:1) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40) */
node --stack_trace_limit=200 your-shit.js
我发现,当我用console.log(err)我得到了正确的结果,所以我看着api,发现以下内容:
var mystring=require('util').inspect(error_object);
你会得到一个string的堆栈跟踪