当我运行此代码时:
throw 'a string';
我在终端上获得了这个堆栈跟踪:
$ node test.js
/home/user/test.js:2
throw 'a string';
^
a string
有文件名和出现此异常的行。
我正在尝试构建异常记录机制,当我使用uncaughtException处理程序时,我无法获取文件名或行。
process.on('uncaughtException', function() {
console.log(arguments);
});
throw 'a string';
当我运行此代码时,我只得到:
$ node test2.js
{ '0': 'a string' }
当我使用uncaughtException处理程序时,是否可以获取文件名/行?
由于
答案 0 :(得分:3)
使用throw new Error('my message');
C:\ Users \ xxx \ Desktop> node test.js
C:\ Users \ xxx \ Desktop \ test.js:1(function(exports,require, module,__ filename,__ dirname){throw'test'; ^测试
test.js的内容:
throw 'test';
C:\ Users \ xxx \ Desktop> node test2.js
C:\ Users \ xxx \ Desktop \ test2.js:1(功能(出口,要求, module,__ filename,__ dirname){throw new Error( ^错误:测试 在对象。 (C:\用户\ XXX \桌面\ test2.js:1:69) 在Module._compile(module.js:456:26) at Object.Module._extensions..js(module.js:474:10) 在Module.load(module.js:356:32) 在Function.Module._load(module.js:312:12) 在Function.Module.runMain(module.js:497:10) 在启动时(node.js:119:16) 在node.js:906:3
test2.js的内容:
throw new Error('test');
也:
在JavaScript中,您可以在技术上
throw
非错误的事情, 但这应该避免。结果不包括潜力 用于获取调用堆栈,也不是用于编程的“名称”属性 检查,也没有描述出错的有用属性。
答案 1 :(得分:0)
您无法从投掷的string
获取堆栈跟踪。实际上,它是构建堆栈的Error
对象。
您可能会想到在捕获异常时会构建new Error
的变通方法,但堆栈跟踪不会返回到抛出的字符串。
解决方案:永远不要抛出字符串,而是使用错误。