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

When a normal exception occurs, a stack trace like the following is outputted:

      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) {
        throw err;

I only get:

    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?

You’re almost there:

process.on('uncaughtException', function(err) {
  throw err;

function foo() {
  throw new Error("HI. I'm an error.");


/* 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-script.js

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

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .
Read More:   Object pools in high performance javascript?

Similar Posts