How to output a deep stack trace in node.js?

debugging, javascript, node.js, stack-trace

Solution

You're almost there:

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)
*/

Problem

When a normal exception occurs, a stack trace like the following is outputted: ``` 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 ``` Which is very helpful. When I then do the following somewhere: ``` process.on('uncaughtException', function(err) { console.trace(); throw err; }); ``` I only get: ``` Trace: at EventEmitter.<anonymous> (/project/src/routines/debug/exceptions.js:4:17) at EventEmitter.emit (events.js:88:20) ``` Which is not helpful at all. How do I make it return the entire stack trace, like the original one?

Original source

Related problems