【发布时间】:2011-04-13 15:36:51
【问题描述】:
在 Javascript 中,假设我想在发生异常时进行一些清理,但让异常继续向上传播,例如:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
这段代码的问题是捕获并重新抛出异常会导致到该点的堆栈跟踪信息丢失,因此如果随后再次捕获异常,堆栈上的更高位置,堆栈跟踪只会向下到重新投掷。这很糟糕,因为这意味着它不包含实际引发异常的函数。
事实证明,try..finally 至少在 Chrome 中具有相同的行为(也就是说,问题并不是重新抛出,而是任何异常处理程序块的存在。)
有谁知道在 Javascript 中重新抛出异常但保留与之关联的堆栈跟踪的方法?如果做不到这一点,如何建议其他方法来添加异常安全的清理处理程序,同时在异常发生时捕获完整的堆栈跟踪?
感谢任何指点:)
【问题讨论】:
标签: javascript exception exception-handling stack-trace callstack