1

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


編集: 申し訳ありませんが、以前はいくつかの詳細を省略しました:

言語: C# 2.0

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

4

2 に答える 2

2

アプリケーションのタイプに基づいて、未処理の例外を処理するための 3 つのシナリオが考えられます。

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

    protected void Application_Error(オブジェクト送信者, EventArgs e)

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

于 2008-10-29T14:11:09.840 に答える
0

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

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)
{
    ....
}
于 2012-07-26T09:31:40.180 に答える