我如何重新抛出一个Javascript中的exception,但保留堆栈?

在Javascript中,假设我想在发生exception时执行一些清理,但让exception继续向上传播堆栈,例如:

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

这个代码的问题是,捕获并重新抛出exception会导致直到那一点的堆栈跟踪信息丢失,所以如果这个exception随后被捕获,堆栈上的高位,堆栈跟踪只能到达-扔。 这很糟糕,因为这意味着它不包含实际抛出exception的函数。

事实certificate,try..finally至less在Chrome中具有相同的行为(也就是说,不是重新抛出问题,而是存在任何exception处理程序块)。

有谁知道重新抛出一个例外的Javascript的方法,但保留与它相关的堆栈跟踪? 否则,如何增加exception安全的清理处理程序的其他方式的build议,以及发生exception时捕获完整的堆栈跟踪呢?

感谢任何指针:)

这是Chrome中的一个错误。 重试一个exception应该保留呼叫跟踪。

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

我不知道任何解决方法。

我终于没有看到问题。 在某些情况下,在终止之后,我确实看到exception没有显示在错误控制台上,但是这似乎是在开发版本中修复的。

Error对象的堆栈属性与Error对象本身同时创build,而不是在抛出的位置。 他们通常是因为成语相同

   抛出新的错误(“消息”);

并且如果您按照您所写的代码使用代码,则在重新抛出错误时,堆栈属性将不会更改。