質問

C ++のunexpected()/ set_unexpected()機能に相当する.netはありますか?


編集:申し訳ありません-以前は一部の詳細を省略しました:

言語:C#2.0

どこかに未処理の例外をスローしているように見えるレガシーアプリがいくつかあります。問題の実際の原因を突き止めることができるようになるまで、顧客の痛みを止めるために何かを配置したいだけです。 C ++では、別の方法で未処理の例外がメインルーチンにバブルすると、set_unexpected()が指す関数が呼び出されます。したがって、.netの同等の機能に関する私の質問。

役に立ちましたか?

解決

アプリケーションの種類に基づいて、未処理の例外を処理するための3つの可能なシナリオ:

  1. Windowsフォームアプリケーションの場合、イベントハンドラーを Application.ThreadException
  2. コマンドラインアプリケーションの場合、イベントハンドラーを AppDomainにフックします。 UnhandledException
  3. ASP.NETアプリケーションの場合、Global.asaxで以下を作成します。

    protected void Application_Error(Object sender、EventArgs e)

免責事項:私はC ++開発者ではありませんが、私が読んだことから、これはあなたの質問に答えるはずです。

他のヒント

これらのハンドラーは、混在モードアプリケーションで最も予期しない例外をキャッチする必要があります。

private delegate long UnhandledExceptionFilter(IntPtr exception);

[DllImport("KERNEL32.DLL", SetLastError = true)]
private static extern IntPtr SetUnhandledExceptionFilter([MarshalAs(UnmanagedType.FunctionPtr)] UnhandledExceptionFilter filter);

// put these in your bootstrapper
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
Application.ThreadException += ApplicationThreadException;
SetUnhandledExceptionFilter(UnhandledExceptionFilter);

void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    ...
}

void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
{
    ...
}

long UnhandledExceptionFilter(IntPtr exception)
{
    ....
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top