2011-03-09 50 views
3

在Chrome中,發生異常時,它會將堆棧跟蹤打印到控制檯日誌。這非常有用,但不幸的是,在重新拋出異常的情況下,這會導致問題。JavaScript重新拋出異常保留堆棧跟蹤

} catch (e) { 
    if (foo(e)) { 
     // handle the exception 
    } else { 
     // The stack traces points here 
     throw e; 
    } 
} 

不幸的是,在jQuery.js下面的代碼是導致所有的異常,如果他們從內部事件處理程序是有這個問題。

try { 
    while(callbacks[ 0 ]) { 
     callbacks.shift().apply(context, args); 
    } 
} 
// We have to add a catch block for 
// IE prior to 8 or else the finally 
// block will never get executed 
catch (e) { 
    throw e; 
} 
finally { 
    fired = [ context, args ]; 
    firing = 0; 
} 

有沒有辦法來改變throw e;使異常與同一堆棧跟蹤重新拋出?

+1

的可能重複[我怎樣才能重新引發在Javascript例外,但保留堆棧?](http://stackoverflow.com/questions/3734236/how-can-i-rethrow-an-exception-在JavaScript中但是保留堆棧) – cmroanirgo

回答

0

您可以做的最好的辦法是抓住原始堆棧並打印出來。 我在單元測試工具中使用它。

try{ 
    ... 
} 
catch(e){ 
    console.log(e.stack); 
    console.log(e.message); 
    throw(e); 
} 
+1

注意:根據此線程(https://bugs.chromium.org/p/chromium/issues/detail?id=60240) 現在在Chrome中重新投影,但我發現它只適用於單個文件中定義的代碼。我的重新投擲是在一個不同的文件,它不工作。 –

相關問題