7

テストケースを入力するために使用される単純な WinForms アプリがあります。このアプリケーションを .NET 4.0 にアップグレードし、XSD スキーマに対して XML を検証するための新しいタブ ページをタブ ページ コントロールに追加して以来、アプリケーションはランダムにクラッシュしていました。例外を再現できませんでした。

私の QA 担当者が受け取るエラーは、一般的な Windows メッセージです。

TestCaseViewer に問題が発生したため、終了する必要があります。ご不便をおかけしてしまい申し訳ございません。

実際のエラーに到達するために、プログラムの Main メソッドの先頭に次のコードを追加しました。

        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        Application.ThreadException += Application_ThreadException;

イベント ハンドラーは次のようになります。

    static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
        try
        {
            MessageBox.Show(e.Exception.ToString(), @"Thread Exception", 
                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        finally 
        {
            Application.Exit();    
        }
    }

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        try
        {
            var ex = (Exception)e.ExceptionObject;
            MessageBox.Show(ex.ToString(), @"Unhandled Exception",
                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        finally 
        {
            Application.Exit();    
        }
    }

残念ながら、これは役に立ちませんでした。エラーが発生しているものは何でも、OS にバブリングしている未処理のエラーを生成する方法で引き続き発生します。

この例外をトラップすることについて、誰か他のアイデアを教えてもらえますか?

4

2 に答える 2

11

app.config に以下を追加してみてください

<runtime>
   <!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
   <legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
于 2013-03-11T21:16:21.110 に答える
2

Visual Studioを使用している場合は、コードで処理されているかどうかに関係なく、未処理のすべての例外、および例外がスローされたときでもブレークするように設定できます。

これを行うには、[デバッグ]メニューから[例外]を選択します。次のようなダイアログボックスが表示されます。

  VisualStudioの例外ダイアログ

本当に真剣になりたい場合は、すべてのチェックボックスをオンにしてみてください。次に、QA担当者から、例外をトリガーするために正確に何が行われているのかを調べ、開発環境内のデバッガーで実行しているときにそれらのアクションを正確に再現します。例外がスローされるたびに、Visual Studioが中断し、問題のあるコード行と完全なスタックトレースが表示されます。

于 2011-02-19T06:20:18.343 に答える