> 백엔드 개발 > C++ > 원래 스택 추적을 유지하면서 C#에서 내부 예외를 어떻게 다시 발생시킬 수 있습니까?

원래 스택 추적을 유지하면서 C#에서 내부 예외를 어떻게 다시 발생시킬 수 있습니까?

Patricia Arquette
풀어 주다: 2025-01-17 07:11:09
원래의
639명이 탐색했습니다.

How Can I Rethrow Inner Exceptions in C# While Preserving the Original Stack Trace?

C#에서 내부 예외를 다시 발생시킬 때 스택 추적 유지

리플렉션을 통해 메서드를 호출하면 예외가 TargetInvocationException으로 래핑됩니다. 스택 추적을 유지하면서 기본 예외를 호출자에게 전달하기 위해 InnerException을 다시 발생시키는 것이 일반적인 접근 방식입니다. 그러나 이 방법은 원래 스택 추적을 실수로 삭제합니다.

.NET 4.5 이상용 솔루션

ExceptionDispatchInfo는 .NET 4.5에 도입되어 이 문제에 대한 솔루션을 제공합니다. 예외를 포착한 다음 다시 발생시키면 스택 추적이 변경되지 않은 상태로 유지됩니다.

<code class="language-csharp">using ExceptionDispatchInfo =
    System.Runtime.ExceptionServices.ExceptionDispatchInfo;

try
{
    // 可能引发异常的代码
}
catch (Exception ex)
{
    ExceptionDispatchInfo.Capture(ex).Throw();
}</code>
로그인 후 복사

이 방법은 AggregateException뿐만 아니라 모든 유형의 예외에 대해 작동합니다.

ExceptionDispatchInfo의 장점

ExceptionDispatchInfo에는 다음과 같은 장점이 있습니다.

  • 원본 스택 추적을 보존하여 디버깅 중에 귀중한 정보를 제공합니다.
  • AggregateException과 같은 다른 예외 래퍼를 지원합니다.
  • 비동기 프로그래밍 시나리오에서 예외 처리를 단순화합니다.

위 내용은 원래 스택 추적을 유지하면서 C#에서 내부 예외를 어떻게 다시 발생시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿