Reputation: 8127
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?
Upvotes: 24
Views: 10402
Reputation: 1
I found that when I used console.log(err) I got the right results so I looked at the api and found the following:
var mystring=require('util').inspect(error_object);
and you'll get the stack trace as a string
Upvotes: 0
Reputation: 997
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)
*/
Upvotes: 30