如何在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的堆栈跟踪