Javascript 由throw()生成的node.js uncaughtException上缺少堆栈跟踪
我正在尝试捕获node.js uncaughtException的堆栈跟踪,它可以很好地处理不同的错误,但不能处理throw()语句: 异常处理时的正确堆栈跟踪:Javascript 由throw()生成的node.js uncaughtException上缺少堆栈跟踪,javascript,node.js,Javascript,Node.js,我正在尝试捕获node.js uncaughtException的堆栈跟踪,它可以很好地处理不同的错误,但不能处理throw()语句: 异常处理时的正确堆栈跟踪: $ cat errorFunc.js process.on('uncaughtException', function(exception) { console.log('uncaughtException occurred: ' + exception.stack); }); MyError(); $ node erro
$ 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
$
知道为什么吗
谢谢
何塞
免责声明:我知道使用process.on('uncaughtException')是一件非常非常糟糕的事情,我会受到惩罚,但在这段代码中使用域不是一个选项。JavaScript允许您抛出任何东西 如果您想在JavaScript中使用堆栈跟踪抛出错误,则需要抛出
Error
对象。
此外,throw是一个运算符,而不是一个函数
试一试
有关更多信息,请参阅Mozilla开发者网络。如果您想让我详细说明如何以及为什么在虚拟机级别(v8中)执行此操作,请告诉我。我认为这与解决你的问题无关。谢谢本杰明的回答!。你知道为什么网络工作者的行为是不同的吗?投掷;Web Worker调用(如果已注册)中的语句OneError回调提供描述、行号、colno等@joseocese是的,最简单的答案是这是因为它们是这样设计的。WebWorkers是web标准节点不遵守的一部分。只是网络工作者很有用。通常,当您关心调试时,您应该总是抛出错误对象,而不是其他东西(调试应该总是带有错误)
$ cat errorThrow.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
throw('my error');
$ node errorThrow.js
uncaughtException occurred: undefined
$
throw new Error('my error');