【发布时间】:2020-04-24 18:47:55
【问题描述】:
前段时间我曾经使用joyent的Verror来在重新抛出时不会丢失堆栈跟踪,我刚刚用节点v12做了一个没有Verror的测试,堆栈跟踪似乎在不使用错误的情况下保持不变。
然后我正在查看 Error.captureStackTrace 的使用,它声明在您的错误中使用它,以便错误不会添加到堆栈中。
我不知道我做错了什么,但有或没有 Error.captureStackTrace - 堆栈跟踪是相同的..
我想知道当前使用 captureStackTrace 的状态,因为我认为没有区别 :-) 以及似乎不再需要的 VError 的使用。
在文档中,它指出 .stack 不调用 captureStackTrace 是不可用的,但我每次都看到它可用,不管有没有 captureStackTrace
这里是 2 x 错误的示例
class MyErrorOne extends Error {
constructor(message) {
super(message);
Error.captureStackTrace(this, this.constructor);
}
}
class MyErrorTwo extends Error {
constructor(message) {
super(message);
Error.captureStackTrace(this, this.constructor);
}
}
我通过注释掉每个错误中的 captureStackTrace 来尝试它们,并且堆栈跟踪是相同的。
谁能帮忙?
这是我测试调用错误的代码
const DoOne = () => {
try {
console.log("executing do one");
DoTwo();
} catch (error) {
console.log("error in DoOne", error);
console.log("here is the stack ", error.stack);
throw new MyErrorOne("threw error from doone in myerrorone");
// throw error;
}
};
const DoTwo = () => {
try {
console.log("executing do two");
throw new MyErrorTwo("threw error from dotwo in myerrortwo");
} catch (error) {
console.log("error in DoTwo", error);
throw error;
}
};
DoOne();
【问题讨论】: