C#의 올바른 예외 재발견 방법
C#에서 예외를 처리할 때 올바른 rethrow 구문은 스택 추적의 정확성을 보장하는 데 중요합니다. 일부 다시 던지기 기술은 유사해 보이지만 미묘한 차이가 디버깅 프로세스에 영향을 미칠 수 있습니다.
방법 1:
<code class="language-csharp">try { // ...代码块... } catch (Exception ex) { // ...处理代码... throw; }</code>
이 메서드는 수정 없이 단순히 발견된 예외를 다시 발생시킵니다. 일반적으로 이 방법은 원래 스택 추적을 유지하여 개발자가 소스에 대한 예외를 정확하게 추적할 수 있도록 하기 때문에 두 번째 방법보다 선호됩니다.
방법 2:
<code class="language-csharp">try { // ...代码块... } catch (Exception ex) { // ...处理代码... throw ex; }</code>
이 방법은 예외를 다시 발생시키기도 하지만 스택 추적을 변경할 수 있습니다. 포착된 예외를 명시적으로 발생시키면 새로운 스택 프레임이 생성되어 예외의 원래 소스가 모호해지고 근본 원인을 찾아내기가 더 어려워집니다.
다른 소스에서 예외를 다시 발생시키려면 ExceptionDispatchInfo를 사용하세요.
다른 컨텍스트(예: 집계 예외 또는 별도 스레드)에서 예외를 다시 발생시켜야 하는 경우 ExceptionDispatchInfo
클래스를 사용해야 합니다. 이 클래스는 원래 예외의 필수 정보를 캡처하고 원래 스택 추적을 유지하면서 새 컨텍스트에서 다시 발생하도록 허용합니다.
예:
<code class="language-csharp">try { methodInfo.Invoke(...); } catch (System.Reflection.TargetInvocationException e) { System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw(); throw; // 告知编译器代码流不会离开此代码块 }</code>
ExceptionDispatchInfo
클래스를 사용하면 원래 예외의 컨텍스트와 스택 추적이 보존되므로 개발자는 오류의 소스를 정확하게 추적할 수 있습니다.
위 내용은 C#에서 예외를 올바르게 다시 발생시키고 스택 추적을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!