在Javascript中,假设我想在发生异常时执行一些清除操作,但是让异常继续在堆栈中传播,例如:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
此代码的问题在于,捕获并重新抛出异常会导致丢失到该点的堆栈跟踪信息,因此,如果随后再次捕获到异常,则该堆栈跟踪在堆栈的较高位置,则堆栈跟踪只会下降到-扔。这很烂,因为这意味着它不包含实际引发异常的函数。
事实证明,try..finally在至少Chrome中具有相同的行为(也就是说,精确地不是问题是重新抛出,而是所有异常处理程序块的存在。)
有谁知道一种在Java中重新抛出异常但保留与之关联的堆栈跟踪的方法吗?失败了,如何建议其他方法来添加异常安全的清理处理程序,同时在发生异常时捕获完整的堆栈跟踪信息?
感谢您的任何指点:)
Dupe:stackoverflow.com/questions/5249960/…–
—
MatthewMartin