gpt4 book ai didi

javascript - 在 node.js 中保留堆栈跟踪

转载 作者:行者123 更新时间:2023-11-30 12:45:49 24 4
gpt4 key购买 nike

我试图在处理来自例如错误的错误时保留调用堆栈。 net.js.

下面的示例有效,但要求我为每个非最佳调用预先分配一个错误对象。

function socketStuff(callback) {

// ..

var maybeError = new Error 'Socket error ';
socket.on('error', function(error) {
maybeError.message += error.message;
callback(maybeError);
});
}

有什么方法可以将我在函数上下文中创建错误所获得的堆栈添加到我从套接字获得的错误之前,而无需事先创建错误对象?

最佳答案

您必须在调用 new Error() 时预先获取堆栈跟踪。您不必创建实际的错误对象;你也可以使用 the V8 stack trace API这样做:

var stackHolder = {};
Error.captureStackTrace(stackHolder, nameOfCurrentFunction);

现在堆栈作为 stackHolder.stack 可用。

V8 惰性格式化堆栈,因此这并不像您想象的那么昂贵; stack 属性实际上是一个属性 getter,它在第一次运行时执行格式化工作,然后用输出替换自身。 (来自上面链接的文档:“为了提高效率,堆栈跟踪在捕获时没有格式化,而是在第一次访问堆栈属性时按需格式化。”)

关于javascript - 在 node.js 中保留堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com