ホームページ >バックエンド開発 >C++ >.NETコンソールアプリケーションで未処理の例外を効果的に処理する方法は?

.NETコンソールアプリケーションで未処理の例外を効果的に処理する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-24 07:57:09874ブラウズ

.NET コンソール アプリケーションでの未処理の例外の処理

このガイドでは、.NET コンソール アプリケーション内で未処理の例外を効果的に管理する方法を説明します。 GUI や Web アプリケーションとは異なり、コンソール アプリでは、AppDomain.CurrentDomain オブジェクトを使用する少し異なるアプローチが必要です。

次に示すように、UnhandledException イベントにイベント ハンドラーをアタッチする一般的な方法は、コンソール アプリケーションでは失敗することがよくあります。

<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler);</code>

これは、AppDomain がすぐに利用できないためです。 解決策は、C# の = 演算子を使用してハンドラーを直接アタッチすることです:

<code class="language-csharp">AppDomain.CurrentDomain.UnhandledException += MyExceptionHandler;</code>

これにより、ハンドラーが正しく登録されることが保証されます。 以下は例外トラップを示す例です:

<code class="language-csharp">static void Main(string[] args)
{
    AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;
    throw new Exception("Application Error!");
}

static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
{
    Console.WriteLine(e.ExceptionObject.ToString());
    Console.WriteLine("An unexpected error occurred.  Press Enter to exit.");
    Console.ReadLine();
    Environment.Exit(1);
}</code>

このコードは UnhandledExceptionTrapper メソッドを登録します。未処理の例外が発生すると、このメソッドは例外の詳細をログに記録し、アプリケーションが終了する前にユーザーがエラーを確認できるようにします。

重要な注意: このメソッドは、JIT コンパイル中にスローされた例外 (型ロード エラーやファイル ロード エラーなど) をキャッチしません。これらに対処するには、「ジッターを遅延させる」戦略を採用します。 これには、問題のある可能性のあるコードを別のメソッドに分離し、それを [MethodImpl(MethodImplOptions.NoInlining)] 属性で装飾することが含まれます。

How to Effectively Handle Unhandled Exceptions in .NET Console Applications?

以上が.NETコンソールアプリケーションで未処理の例外を効果的に処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。