2012-01-25 6 views
7

クロムにはknown bugがあり、Javascriptで例外を再発行するときにスタックトレースを保存しないことがわかります。例外を元に戻し、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プラグインですか?任意の回避策やアイデア?最後のcatchブロックで

+0

なぜ2つのtry ... catchを選択したのか分かりますか? –

+0

まず、サービスの1つが利用できない場合に備えて、ユーザーに素敵なメッセージを表示する必要があるためです。クラッシュはオプションではありません。 第二に、何が起こったのかを正確に知るために、バックエンドのどこかでjavascript例外の内容を送信する必要があるからです。たぶんそれはバグだと私は顧客が私のサイトは動作していないと言う前にそれを修正したい。 – rcarrillopadron

+0

しかし、なぜ1つのレベルのtry ... catchでは不十分ですか?すべてのエラーメッセージを集約したいからですか? –

答えて

4

throw e.stack; 

を試してみて、私は非常に最後の1(ブラウザに行く1)を意味します。あなたの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; 
    } 

何が奇妙なバグですか?

関連する問題