丢失node.js上的堆栈跟踪由throw()生成的uncaughtException

我试图捕捉一个node.js uncaughtException的堆栈跟踪,它适用于不同的错误,但不适用于throw()语句:

纠正exception处理的堆栈跟踪:

$ cat errorFunc.js process.on('uncaughtException', function(exception) { console.log('uncaughtException occurred: ' + exception.stack); }); MyError(); $ node errorFunc.js uncaughtException occurred: ReferenceError: MyError is not defined at Object.<anonymous> (/home/jolcese/code/WebEnclaves/Server/errorFunc.js:5:1) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:901:3 $ 

由throw()引起的exception缺less堆栈跟踪:

 $ cat errorThrow.js process.on('uncaughtException', function(exception) { console.log('uncaughtException occurred: ' + exception.stack); }); throw('my error'); $ node errorThrow.js uncaughtException occurred: undefined $ 

任何想法为什么?

谢谢Jose

免责声明:我知道使用process.on('uncaughtException')是一个非常非常糟糕的事情,我会受到惩罚,但在这段代码中使用域不是一个选项。

JavaScript可以让你扔任何东西。

如果你想在JavaScript中抛出栈跟踪错误,你需要抛出Error对象。 (规格)

而且,throw是一个操作符而不是一个函数。

尝试

 throw new Error('my error'); 

有关更多信息,请参阅Mozilla Developer Network上的手册 。