在node.js中保留堆栈跟踪
Preserve stack traces in node.js
当处理来自例如。net.js的错误时,我试图保留调用堆栈。
下面的例子可以工作,但需要我为每个调用预先分配一个错误对象,这不是最佳的。
function socketStuff(callback) {
// ..
var maybeError = new Error 'Socket error ';
socket.on('error', function(error) {
maybeError.message += error.message;
callback(maybeError);
});
}
是否有任何方法可以将我从在函数的上下文中创建错误到从套接字获得的错误的堆栈添加到堆栈中,而无需事先创建错误对象?
您必须在new Error()
调用时预先获取堆栈跟踪。你不需要创建一个实际的Error对象;你也可以使用V8的堆栈跟踪API:
var stackHolder = {};
Error.captureStackTrace(stackHolder, nameOfCurrentFunction);
,现在堆栈作为stackHolder.stack
可用。
V8延迟格式化堆栈,所以这并不像你想象的那么昂贵;stack
属性实际上是一个属性getter,它第一次运行时做格式化工作,然后用输出替换自己。(来自上面链接的文档:"为了提高效率,堆栈跟踪在捕获时不会格式化,而是在需要时,第一次访问堆栈属性。")
只需使用现有的长堆栈跟踪库之一,例如这个
相关文章:
- Fresh Spark Install+Homestead上的Vue异步堆栈跟踪错误
- 打印javascript控制台的堆栈跟踪
- 如何在Chrome扩展内容脚本中获取错误堆栈跟踪
- 正在获取控制台消息的堆栈跟踪
- Bluebird 在与 Sequelize/MySQL 一起使用时显示损坏的堆栈跟踪
- 如何在Internet Explorer中获取javascript堆栈跟踪.e.stack 返回 “Undefined”
- JavaScript 中的 try-catch:如何获取原始错误的堆栈跟踪或行号
- 节点错误堆栈跟踪未定义
- 如何在 node.js 中输出深度堆栈跟踪
- 如何在 Firefox 中获取 JavaScript 堆栈跟踪
- 蓝鸟(或其他承诺库)保持承诺错误堆栈跟踪
- 在 Karma (AngularJS) 中抑制堆栈跟踪
- Firebug:角度堆栈跟踪不显示错误的来源(行号,文件)
- 在node.js中获取*current*堆栈跟踪(例如,通过SIGINT)
- 在开发Firefox扩展时获取堆栈跟踪
- 正在清理Protractor堆栈跟踪
- 从nodejs中抛出的字符串中获取堆栈跟踪
- 有没有一种方法可以从Internet Explorer中的Error对象中获取行号或堆栈跟踪
- 何时在窗口上提供正确的堆栈跟踪.错误函数
- 如何将js堆栈跟踪替换为include"行“;以及“;位置“;文本