4

アプリケーションがハングして、アプリケーションの「未処理の例外」ダイアログではなく、デフォルトの「この問題についてマイクロソフトに連絡してください」ポップアップが表示されるという問題があります。

アプリケーション コードでは、Application.ThreadException と AppDomain.CurrentDomain.UnhandledException の両方が、エラー ログをディスクに書き込み、スクリーンショットをディスクに保存し、わかりやすいダイアログ ボックスを表示するメソッドにリダイレクトされます。

しかし、このエラーが発生すると、これら 3 つのことはいずれも起こりません。私が得るのは、イベントビューアでこれだけです:

EventType clr20e3、P1 myapp.exe、P2 4.0.0.0、P3 47d794d4、P4 mscorlib、P5 2.0.0.0、P6 471ebc5b、P7 15e5、P8 27、P9 system.argumentoutofrange、P10 NIL

アプリケーションが数時間実行された後にのみエラーが発生するように見えることを考えると、メモリ リークの問題ではないかと思います。「clr20e3」を少し検索しましたが、ASP.Net のものしか見つかりませんでした。私のアプリケーションは Windows Forms (.Net 2.0) exe で、C# と一部のアンマネージ C++ の両方でかなりの数のアセンブリを使用しています。

エラー処理メソッドのエラーである可能性もあると思います-いくつかの回答が示唆するように、エラーハンドラーの開始時にログを記録しようとするかもしれません(ただし、とにかくそれがほとんどの場合...)。

この問題を解決する助けがあれば、それが解決策であろうと、問題の根本原因を見つける方法の提案であろうと、大歓迎です。

更新: 元のバグの根本的な原因は、負のインデックス (system.argumentoutofrange) を持つ配列にアクセスすることでした。なぜこれがトラップされなかったのかは少し謎ですが、両方の例外が同じ処理コードに送信されたことを考えると、(たとえば) 両方が呼び出されてリソースをめぐって争うという状況がなかったのではないかと思います。 (たとえば、ログ ファイル)?

エラー処理コードで他の何よりも先に EventLog.WriteEntry を実行することで、これを証明することができました。エラー処理での再入力を防ぐフラグを追加したので、問題はないようです...

4

3 に答える 3

1

ここで暗闇の中で撮影するだけです- ArgumentOutOfRangeException が実際に例外ハンドラーからスローされる可能性はありますか?

さらに、問題のアプリケーションの種類については言及していませんでした -- Application.ThreadException は WinForms スレッドにのみ影響するため、これが GUI アプリケーションでない場合は役に立ちません。( MSDN ドキュメントの備考セクションを参照してください)

于 2008-09-18T13:20:12.483 に答える
1

ArgumentOutOfRangeExceptionがハンドラー自体からスローされるかどうかを確認しましたか? 例外ハンドラーのエントリでイベント ログまたはトレースに簡単に書き込み、実際にヒットしていることを確認する価値がある場合があります。

編集:イベント ログへの書き込みに関する情報は、次の場所にあります。

http://support.microsoft.com/kb/307024

于 2008-09-18T13:24:08.183 に答える
0

Application.Run() を複数回呼び出していますか? これにより、説明したのと同じ症状が発生します。回避策としてカスタム ApplicationContext クラスを作成する必要があります。インフレ調整済み​​の0.02ドルだけです。

于 2010-12-06T17:05:36.607 に答える