10

アプリケーションがクラッシュして閉じ、[送信しない]ボタンと[エラーレポートを送信する]ボタンを含むダイアログが表示された場合に実行する必要のある手順を教えてください。

これを解決するためにイベントビューアを見る以外に何ができるでしょうか?

ありがとう

4

6 に答える 6

15
  1. エントリ メソッドの本体のtry/catch/finally周りに構造を追加できます。Main()

  2. ThreadExceptionWinForms の場合、Application.Run() の直前にハンドラーを追加して、WinForms UI イベント ハンドラーでスローされた例外をキャッチできます。

    Application.ThreadException +=
       new ThreadExceptionEventHandler(Application_ThreadException);
    
  3. 他のすべての未処理の例外は、次を使用してキャッチできます。

    AppDomain.CurrentDomain.UnhandledException +=
       new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    

    ただし、これは例外のログ/レポートのみを許可することに注意してください。この最終ハンドラーを終了すると、アプリケーションが閉じないようにすることはできません。

  4. Visual Studio は初回例外で中断するように構成することもでき、外部デバッガー (管理された SoS 拡張機能を持つ WinDbg など) も初回例外をキャッチできます ( http://www.codeproject.com/KB/debug/windbg_part1.aspx ) 。 .

また、log4net などのロギング フレームワークを使用して、便利なロギングをアプリに追加し、アプリケーションを閉じる前に例外情報をダンプします。

于 2009-04-28T14:48:33.200 に答える
2

理想的には、nLoglog4netなどのログ ライブラリを使用して、未処理の例外や一般的な例外をログに記録し、発生時にコードにログを記録する必要があります。

また、開発マシンで実行されていないときに問題を追跡するのに役立つように、アプリケーションにさまざまなレベルのログを記録することも役立ちます。nLog を使用すると、運用コードにログを残したまま、ログ構成ファイルを使用してログ出力を有効または無効にすることができます。

log4net を使用したことがないので、同様の機能があるかどうかはわかりません。

于 2009-04-28T14:39:40.197 に答える
1

「送信/送信しない」エラーは、バックグラウンド スレッドで未処理の例外がある場合に発生する傾向があります (メイン スレッドは、スタック トレースを使用して .NET ダイアログを続行/終了することを示します)。

スレッドの関数に例外ハンドラーを追加し、そこからログを記録します。

void RunMyThread()
{
    try
    {
        // background thread code
    }
    catch (Exception ex)
    {
        // Log the exception
    }
}

これは非常に単純化されており、例外を処理したい方法ではない場合があります。しかし、うまくいけば、これがあなたを正しい方向に動かしてくれるでしょう。

于 2009-04-28T14:46:08.650 に答える
0

それが顧客のサイトで発生し、開発者のデバッガー内で簡単に再現できない場合は、事後分析デバッグを行うことができます。Userdumpを使用してメモリ ダンプ ファイル (.DMP) を収集するのが好きです。次に、windbg を使用して分析します。

于 2009-04-28T15:11:07.560 に答える
0

WinDBG を使用して問題をデバッグします。例外がスローされたときに (ブレークポイントでの停止のように) 中断させてから、スタックトレースを調べることができます...スコープ内のオブジェクトなど...

于 2009-04-28T14:46:46.760 に答える