2012-01-25 37 views
7

我知道在Javascript中重新拋出異常時,Chrome有一個known bug不保留堆棧跟蹤。是否有任何解決方法重新拋出一個異常,並保留在Javascript中的堆棧跟蹤?

我有下面的代碼在Chrome中運行:

try { 
    try { 
     runCodeThatMayThrowAnException(); 
    } catch (e) { 
     // I'm handing the exception here (displaying a nice message or whatever) 
     // Now I want to rethrow the exception 
     throw (e); 
    } 
} catch (e) { 
    // The stacktrace was lost here :(
} 

有什麼辦法來保持堆棧跟蹤?一個jQuery插件可能?任何解決方法或想法?

+0

我可以知道爲什麼你選擇了兩次嘗試...趕上? –

+0

首先,因爲我需要向用戶顯示一個好消息,以防其中一個服務不可用。崩潰不是一種選擇。 其次,因爲我需要將JavaScript異常的內容發送到我的後端以確切地知道發生了什麼。也許這是一個錯誤,我想在客戶打電話給我說網站無法正常工作之前解決它。 – rcarrillopadron

+0

但是爲什麼一個級別的嘗試......趕上還不夠?是因爲你想彙總所有的錯誤信息嗎? –

回答

4

在最後的catch塊嘗試

throw e.stack; 

我的意思的最後一個(就是要瀏覽器)。如果你將你的try/catch嵌套得更深,你需要改變你以前的投擲。

function throwError() { 
     var test = _undefined.propertyAccess; 
    } 
    try { 
     try { 
      try { 
       throwError(); 
      } catch (e) { 
       alert("exception: " + e.stack); 
       throw e; 
      } 
     } catch (e) { 
      console.log(e.stack); 
      throw e; 
     } 
    } catch (e) { 
     throw e.stack; 
    } 

這是一個奇怪的錯誤。

相關問題