2

問題

アプリケーションが例外をスローしても、何も起こりません。

アプリケーションは、空のtry catchがより高いレベルのどこかで例外をキャッチしているように反応し、例外は無視されます。

このような例外を単にスローすると、例外throw new Exception("BOOM");をキャッチして無視できるのは何ですか?コード内に空のtry-catchまたはより高いレベルのtry-catchが見つかりません。例外が発生しますか?

DragDropイベントハンドラーで例外をスローしています。

質問

  • この動作の考えられる理由はありますか?
  • 例外がどこでなくなったかを正確に確認する方法はありますか?呼び出しスタックを調べて、逆アセンブルされたコードにステップインし、他のレベルで例外をキャッチしてみました...
4

1 に答える 1

1

例外はDragDropイベントでスローされます

それは重要な情報でした。スニペットを投稿していれば明らかだったでしょう。ドラッグアンドドロップイベントハンドラーは特別です。それらで発生した例外は、診断なしで飲み込まれます。その背後にある可能性のある哲学は、別のプログラムによって生成されたデータを処理するために失敗する可能性が高いということです。そして、そのような悪いデータを生成するバグのあるプログラムがあなたのデータをクラッシュさせることは許されるべきではありません。

コードをデバッグする必要がある場合は、[デバッグ+例外]を使用し、CLR例外の[スロー]チェックボックスをオンにします。例外がスローされると、デバッガーが停止するようになりました。

ユーザーに例外について知らせたい場合は、飲み込む前にtry/catchを使用して例外をキャッチする必要があります。別のプログラムのバグがあなたのものになるというわずかなリスクがあります。

于 2012-12-15T10:25:05.820 に答える