ホームページ >バックエンド開発 >C++ >コンソール アプリケーションにグローバル例外処理を実装するにはどうすればよいですか?

コンソール アプリケーションにグローバル例外処理を実装するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-24 08:07:091052ブラウズ

How Can I Implement Global Exception Handling in Console Applications?

コンソール アプリケーションでのグローバル例外処理

コンソール アプリケーションでは、未処理の例外によってアプリケーションの実行が中断され、データが失われる可能性があります。これを防ぐために、グローバル例外ハンドラーを定義して、これらの例外を適切にキャッチして処理できます。

カスタマイズされたグローバル例外処理

AppDomain クラスは、グローバル例外ハンドラーを定義するためにサブスクライブできる UnhandledException イベントを提供します。 .NET 2.0 以降では、次のコードを使用できます:

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

VB.NET ノート

VB.NET で作業する場合は、以下に示すように、AppDomain.CurrentDomain オブジェクトの前に「AddHandler」キーワードを使用する必要があることに注意してください。

<code class="language-vb.net">AddHandler AppDomain.CurrentDomain.UnhandledException, New UnhandledExceptionEventHandler(AddressOf MyExceptionHandler)</code>

実装例

次の C# コードは、コンソール アプリケーションのグローバル例外ハンドラーの基本的な例を示しています。

<code class="language-csharp">using System;

class Program
{
    static void Main(string[] args)
    {
        // 注册全局异常处理程序
        AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;

        // 抛出一个未处理的异常以进行演示
        throw new Exception("程序异常!");
    }

    static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
    {
        // 记录或处理未处理的异常
        Console.WriteLine(e.ExceptionObject.ToString());

        // 让用户有机会查看错误消息
        Console.WriteLine("按 Enter 键继续");
        Console.ReadLine();

        // 终止应用程序
        Environment.Exit(1);
    }
}</code>

注: JIT コンパイル中に CLR によって生成されるタイプおよびファイルのロード例外は、グローバル例外ハンドラーを使用してキャッチできません。これらの例外を処理するには、遅延コンパイルを行うか、危険なコードに [MethodImpl(MethodImplOptions.NoInlining)] 属性を適用することを検討してください。

以上がコンソール アプリケーションにグローバル例外処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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