>백엔드 개발 >C++ >.NET 콘솔 애플리케이션에서 글로벌 예외 처리기를 구현하는 방법은 무엇입니까?

.NET 콘솔 애플리케이션에서 글로벌 예외 처리기를 구현하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-24 08:06:11953검색

How to Implement a Global Exception Handler in .NET Console Applications?

.NET 콘솔 애플리케이션의 전역 예외 처리

콘솔 애플리케이션에도 처리되지 않은 예외를 처리하는 메커니즘이 필요합니다. ASP.NET 응용 프로그램은 global.asax를 사용할 수 있고 Windows 응용 프로그램/서비스는 AppDomain의 UnhandledException 이벤트 처리기를 사용할 수 있지만 콘솔 응용 프로그램은 약간 다른 접근 방식을 취합니다.

콘솔 애플리케이션용 솔루션

.NET에서 콘솔 애플리케이션에 대한 전역 예외 처리기를 정의하는 올바른 방법은 AppDomain 클래스의 UnhandledException 이벤트를 사용하는 것입니다.

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

이는 .NET 2.0 이상에서 예상대로 작동합니다.

VB.NET 개발자를 위한 지침

VB.NET에서는 currentDomain보다 먼저 "AddHandler" 키워드를 사용해야 합니다. 그렇지 않으면 UnhandledException 이벤트가 IntelliSense에 표시되지 않습니다. 구문의 차이는 VB.NET과 C#이 이벤트 처리를 처리하는 방식에서 비롯됩니다.

다음은 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>

제한사항

이 접근 방식은 Main() 메서드 실행이 시작되기 전에 JIT 컴파일러에서 생성된 유형 및 파일 로드 예외를 포착할 수 없다는 점에 유의하는 것이 중요합니다. 이러한 예외를 포착하려면 JIT 컴파일러를 연기하고 위험한 코드를 별도의 메서드로 이동하고 [MethodImpl(MethodImplOptions.NoInlining)] 특성을 적용해야 합니다.

위 내용은 .NET 콘솔 애플리케이션에서 글로벌 예외 처리기를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.