0

StackOverflowで同様のトピックがいくつか作成されていることを知っています(たとえば、あちこち。よく知られている問題があります。Windows764ビットのVisualStudioでスローされたユーザー未処理の例外はIDEデバッガーによって処理されないため、デバッガーは適切なコード行で中断されません。[ツール]->[例外...]メニューで[スロー]チェックボックスを有効にしてすべての例外をキャッチしたくないので、Microsoftの記事ソリューションを使用しようとしました。

MSソリューションを適用すると状況が変わりましたが、VSデバッガーはまだ正しく実行されません。

現在、新しい例外がスローされると、システム内部エラーメッセージが表示され、VSデバッガーはエラーラインで正しく停止しますが、1秒未満でアプリケーションが終了します...

このバグを解決するための他の解決策はありますか?いわゆるサイレント例外を使用したプログラミングは非常に不快です...

編集:私は、今私の質問があまり怒りっぽくないことを願っています...

4

1 に答える 1

1

私の場合、レジストリの変更は必要ありませんでした。このトピックとReddの回答によると、Program.csファイルを次のように変更しました。

static void Main()
{
    try
    {
        System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnGuiUnhandedException);
        AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;

        var form = new MainForm();
        form.ShowDialog();
    }
    catch (Exception e)
    {
        HandleUnhandledException(e);
    }
    finally
    {
        // Do stuff
    }
}

private static void HandleUnhandledException(Object o)
{
    // TODO: Log it!
    Exception e = o as Exception;

    if (e != null)
    {

    }
}

private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e)
{ 
    HandleUnhandledException(e.ExceptionObject);
}

private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
    HandleUnhandledException(e.Exception);
}

これで、デバッガーは正常に動作するため、未処理の例外で停止し、処理済みの例外で停止しません。MicrosoftはOSレベルでWindows764ビット用のSP1のサイレント例外の問題を解決しているようですが、VSを正しく機能させるには、ユーザー/プログラマーのアクションが必要です。

于 2013-01-02T12:00:10.040 に答える