0
function testFun() {
    onerror = function() { log("caught the error"); return true; };
    setTimeout(function() { throw "bad bad bad"; }, 300);
};

これはサンプル、コードですが、問題を示しています。これをFFまたはIE7で実行すると、適切な「エラーをキャッチしました」というメッセージが出力されます(妥当な「ログ」関数を想定しています)。

ただし、VS2008でコードをデバッグすると、デバッガーはスローで停止し、「Microsoft JScriptランタイムエラー:例外がスローされ、キャッチされません」というメッセージが表示されます。「続行」または「無視」と言った場合、ログメッセージは生成されません。

私が使用している実際のコードはこれよりもはるかに大きいため、これは問題です。デバッグしたい場合もあります。したがって、2つの質問:

  1. 理由はわかっていますが、知らないフラグを使用してこの動作を変更できますか?
  2. このコードで自分が行っていると思うこと(グローバルな「onerror」ハンドラーを設定)を行っていますか?そうでない場合、このタイプのエラーをキャッチするための適切なパターンは何ですか?

注:代わりにwindow.onerrorを使用しても、この問題との違いはありません。

4

1 に答える 1

2

これによると、グローバルonerror関数の定義はIEでは機能しません。彼らはおそらくIE6以前について話していたので、おそらくMSがIE7用に修正したのかもしれませんが、これがVSデバッガーに自動的に流れるとは思いません。

window.onerror = functionとにかく、だけでなく使ってみてくださいonerror

それがうまくいかない場合はtry/catch、タイマー関数内のブロックを使用する必要があると思います。

PS:Firefoxを入手してFirebugを使用してください。デバッガー(およびその他すべて)は、VSデバッグよりもはるかに優れており、使いやすくなっています。

于 2009-03-01T20:01:51.590 に答える