【问题标题】:Get a stack trace from a throwed string in nodejs [duplicate]从nodejs中抛出的字符串获取堆栈跟踪[重复]
【发布时间】:2016-02-26 23:31:09
【问题描述】:

当我运行这段代码时:

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 处理程序时是否可以获得文件名/行?

谢谢

【问题讨论】:

标签: javascript node.js stack stack-trace


【解决方案1】:

使用throw new Error('my message');

C:\Users\xxx\Desktop>node test.js

C:\Users\xxx\Desktop\test.js:1 (函数 (exports, require, 模块,__filename,__dirname) { throw 'test'; ^ 测试

test.js 的内容: throw 'test';

C:\Users\xxx\Desktop>节点 test2.js

C:\Users\xxx\Desktop\test2.js:1 (函数 (exports, require, 模块,__filename,__dirname){抛出新错误( ^ 错误:测试 在对象。 (C:\Users\xxx\Desktop\test2.js:1:69) 在 Module._compile (module.js:456:26) 在 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 不是错误的东西, 但这应该避免。结果不包括潜力 用于获取调用堆栈,也不是用于编程的“名称”属性 检查,也没有任何有用的属性描述出了什么问题。

来自Error Handling in Node.js

【讨论】:

  • 我知道,但我正在尝试记录我正在使用的子模块的错误,这可能只会抛出字符串...
【解决方案2】:

您无法从抛出的string 中获取堆栈跟踪。事实上,构建堆栈的是 Error 对象。

您可能会想到一种解决方法,即在捕获到异常时构建 new Error,但堆栈跟踪不会返回到抛出的字符串。

解决方案:永远不要抛出字符串,而是使用错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2011-05-12
    • 2013-09-04
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多