2

次の方法で、スタートアップ ルーチンでアプリケーション (C#、WPF、.NET4) にグローバル Exceptionhandlers を登録しました。

AppDomain.CurrentDomain.UnhandledException += (sender, args) => HandleException(args.ExceptionObject as Exception);
Application.Current.DispatcherUnhandledException += (sender, args) => {
   HandleException(args.Exception);
   args.Handled = true;
};

ここで、HandleException() は例外をログに記録し、いくつかの追加情報を含む MessageBox を表示します。

現在、HandleException() が呼び出されていない一部の顧客のマシンで、アプリケーションがクラッシュすることがあります。Windows は次のメッセージを表示しています。

ここに画像の説明を入力

WindowsEventLog で、次のエントリを取得します。

エントリ 1:

Name der fehlerhaften Anwendung: proconact.exe, Version: 1.0.0.1365, Zeitstempel: 0x511531df
Name des fehlerhaften Moduls: PresentationFramework.ni.dll, Version: 4.0.30319.588, Zeitstempel: 0x504db27d
Ausnahmecode: 0xc00000fd
Fehleroffset: 0x002ef05b
ID des fehlerhaften Prozesses: 0x1bec
Startzeit der fehlerhaften Anwendung: 0x01ce0b5dce4030a6
Pfad der fehlerhaften Anwendung: C:\Program Files (x86)\proconact_sck\proconact.exe
Pfad des fehlerhaften Moduls: C:\windows\assembly\NativeImages_v4.0.30319_32\PresentationFramewo#\c627e9b7f10b01db43645284e601f255\PresentationFramework.ni.dll
Berichtskennung: d8d69f94-777a-11e2-b4b0-b4b52f2aad4f

エントリ 2:

Fehlerbucket 3482664247, Typ 5
Ereignisname: CLR20r3
Antwort: Nicht verfügbar
CAB-Datei-ID: 0

Problemsignatur:
P1: proconact.exe
P2: 1.0.0.1365
P3: 511531df
P4: PresentationFramework
P5: 4.0.0.0
P6: 504db27d
P7: 329d
P8: 0
P9: System.StackOverflowException
P10: 

Angefügte Dateien:
d:\Temp\WER6E9F.tmp.WERInternalMetadata.xml

Diese Dateien befinden sich möglicherweise hier:
C:\Users\roger\AppData\Local\Microsoft\Windows\WER\ReportArchive\AppCrash_proconact.exe_b0fabce1f86d1f843de5b5b4692a3e8ecd928_2c77f03d

Analysesymbol: 
Es wird erneut nach einer Lösung gesucht: 0
Berichts-ID: d8d69f94-777a-11e2-b4b0-b4b52f2aad4f
Berichtstatus: 0

例外を処理できるようにするにはどうすればよいですか (例外が発生した場所を分析するためのスタックトレースを取得するための平均的な理由のため)?

4

1 に答える 1

2

一部の例外は、AppDomain.UnhandledException でもキャッチできません。マネージ コードを実行し続けるにはあまりにも厄介だからです。

StackOverflowException はそのような心臓発作であり、この Web サイトにその名前を付けるほど悪名高いです。ジッタの実行など、一般的なマネージ コードの実行作業を行うための十分なスタック スペースが残っていません。ExecutionEngineException は、破壊されたガベージ コレクション ヒープによってトリガーされ、.NET 4.0 以降ではキャッチできない別のものです。

いいえ、ショーは終了し、WER ダイアログと Windows イベント ログ エントリだけが残ります。SO は常にバグが原因で発生するため、修正する必要があります。

于 2013-02-15T15:11:35.053 に答える