2

Vista 認定のために提出するために、アプリケーションを更新しようとしています。要件の一部は、既知の例外のみを処理し、Windows エラー報告ですべての未処理の例外を処理することです。

アプリケーション (イベントにサブスクライブApplication.ThreadException) にグローバル例外ハンドラーがあり、そこで既知の例外に対して特定の処理を実行しますが、例外が不明な場合は、アプリを終了して WER を処理するために例外をスローします。

これを行う方法と、再スローした場合にコール スタックを維持する方法がわかりません。その後、コール スタックが再作成されます。

経由で終了することを検討しましたがEnvironment.FailFast()、必要な例外情報が得られるとは考えていません。

明らかな何かが欠けていますか?

4

3 に答える 3

1

新しい例外をスローして、InnerException プロパティを未処理のものに設定しないのはなぜですか? デフォルトの StackTrace プロパティは、両方のトレースを連結します。

WinQual から取得したメモリ ダンプからデバッグしている場合は、いずれにしてもトラップされるネイティブ例外になることに注意してください。ほとんどの場合、ネイティブ スタックをさかのぼってマネージ例外を取得することができます。使用可能なシンボルがあれば、通常、問題の原因を簡単に見つけることができます。とにかく、この状況ではマネージ例外のスタック トレースは冗長になります。

于 2008-10-28T14:42:13.820 に答える
0

はい、ただし、キャッチ ブロックではなく、Application.ThreadException グローバル ハンドラー内にいるため、throw を呼び出すだけではなく、e.Exception をスローする必要があります。

于 2008-10-28T14:02:35.130 に答える
-1

はい、Marc が述べているように、THROW を使用するだけで、元の例外が再スローされ、スタック トレース情報が保持されます。

THROW E は、元のスタック情報が失われた状態で、例外スタック全体を最初からやり直します。通常、これは必要なものではありません。

別の方法として、新しい例外をスローし、元の例外を内部例外として追加することもできます。次に、新しい例外により、追加の情報が追加される可能性があります。

于 2008-10-28T13:59:54.590 に答える