首頁 >後端開發 >C++ >在 C# 中重新拋出 InnerException 時如何保留堆疊追蹤?

在 C# 中重新拋出 InnerException 時如何保留堆疊追蹤?

DDD
DDD原創
2025-01-17 07:17:09811瀏覽

How Can I Preserve Stack Traces When Rethrowing InnerExceptions in C#?

在 C# 中重新拋出內部異常時保持原始堆疊追蹤

當在 C# 中重新拋出內部異常時原始堆疊追蹤遺失時,偵錯和故障排除變得更加困難。 幸運的是,.NET 4.5 中引入的 ExceptionDispatchInfo 類別提供了解決方案。

解:

要保留完整的堆疊跟踪,請像這樣使用 ExceptionDispatchInfo

<code class="language-csharp">try
{
    task.Wait();
}
catch (AggregateException ex)
{
    ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
}</code>

說明:

ExceptionDispatchInfo 捕獲異常及其當前狀態,包括堆疊跟踪,允許您稍後重新拋出它而不更改此資訊。 這不限於AggregateException;它適用於任何異常類型。 此功能對於 await 關鍵字特別有用,它通常會從 AggregateException 實例中解開內部異常,以提高非同步和同步程式碼之間的互通性。

以上是在 C# 中重新拋出 InnerException 時如何保留堆疊追蹤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn