如何在Javascript中抛出异常,但保留堆栈?

2020/11/07 03:42 · javascript ·  · 0评论

在Javascript中,假设我想在发生异常时执行一些清除操作,但是让异常继续在堆栈中传播,例如:

try {
  enterAwesomeMode();
  doRiskyStuff(); // might throw an exception
} catch (e) {
  leaveAwesomeMode();
  throw e;
}
doMoreStuff();
leaveAwesomeMode();

此代码的问题在于,捕获并重新抛出异常会导致丢失该点之前的堆栈跟踪信息,因此,如果随后再次捕获到异常,则该异常在堆栈上移至更高,则堆栈跟踪只会下降到-扔。这很烂,因为这意味着它不包含实际引发异常的函数。

事实证明,try..finally在至少Chrome中具有相同的行为(也就是说,精确地不是问题是重新抛出,而是所有异常处理程序块的存在。)

有谁知道一种在Java中重新抛出异常但保留与之关联的堆栈跟踪的方法吗?失败了,如何建议其他方法来添加异常安全的清理处理程序,同时在发生异常时捕获完整的堆栈跟踪信息?

感谢您的任何指点:)

这是Chrome中的错误。抛出异常应保留调用跟踪。

http://code.google.com/p/chromium/issues/detail?id=60240

我不知道有任何解决方法。

我最终看不到问题。我确实看到,在某些情况下,最终解决之后,错误控制台上不会默默显示异常,但是这种错误似乎在开发版本中已得到修复。

Error对象的stack属性与Error对象本身同时创建,而不是在抛出错误时创建。由于成语,它们通常是相同的

   抛出新的Error(“ message”);

如果您使用的代码与编写代码时相同,则抛出错误时不会更改stack属性

本文地址:http://javascript.askforanswer.com/ruhezaijavascriptzhongpaochuyichangdanbaoliuduizhan.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!