我一直在从库调用中返回错误,但是错误的堆栈跟踪没有保留完整的堆栈跟踪,因此很难找到完全这里正在崛起。
我想找出一种方法来添加对这个错误的堆栈跟踪的访问位置/文件的引用。我可能无法捕获顶级函数名称,但即便如此,如果我能得到错误处理程序的行号,那么就足以指出我正确的方向。
在修补它之后,我相信我可能有一个相当hacky的解决方案可能会起作用(虽然它在我的生产环境中未经测试)。
var addStackFrame = function(e) {
var splitStack = e.stack.split("\n");
// We splice from the 3rd element to drop
// the error name, and addStackFrame() reference.
var thisLine = new Error().stack
.split("\n")
.slice(2, 3)
.join('\n');
e.stack = [splitStack[0], thisLine]
.concat(splitStack.slice(1))
.join("\n");
return e;
};
此日志添加了调用Error对象的堆栈跟踪的最后三个方法。
我也看到this question表明可能有一种原生的V8实现方式,我更感兴趣的是使用它。
是一种本地添加对现有Error对象的堆栈跟踪的引用的方法吗?除此之外,是否有更优雅的方法来处理向堆栈跟踪添加上下文?