Heim > Backend-Entwicklung > C++ > Wie kann ich Stack-Traces beim erneuten Auslösen von Ausnahmen in C# beibehalten?

Wie kann ich Stack-Traces beim erneuten Auslösen von Ausnahmen in C# beibehalten?

DDD
Freigeben: 2025-01-17 07:06:09
Original
178 Leute haben es durchsucht

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

Stack-Trace beim erneuten Auslösen einer inneren Ausnahme in C# beibehalten

Während es gängige Praxis ist, InnerException erneut auszulösen, um die zugrunde liegende Ausnahme an den Aufrufer zu übergeben, kann dies versehentlich wertvolle Stack-Trace-Informationen löschen und so die Debugging-Bemühungen behindern.

Wenn in C# eine Methode über Reflektion aufgerufen wird und eine Ausnahme auftritt, wird eine TargetInvocationException als Wrapper um die eigentliche Ausnahme geworfen. Um eine innere Ausnahme abzurufen, lösen Entwickler sie oft einfach erneut aus. Durch diesen Vorgang werden jedoch die Stack-Trace-Informationen gelöscht, die auf die wahre Fehlerquelle hinweisen.

Lösung mit ExceptionDispatchInfo

Seit .NET 4.5 bietet die ExceptionDispatchInfo-Klasse eine Lösung für dieses Problem. Es ermöglicht das Abfangen und erneute Auslösen einer Ausnahme unter Beibehaltung des Stack-Trace. So verwenden Sie es:

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

try
{
    // 执行可能抛出异常的方法。
    task.Wait();
}
catch (AggregateException ex)
{
    // 捕获内部异常并使用原始堆栈跟踪重新抛出它。
    ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
}</code>
Nach dem Login kopieren

Diese Methode ist besonders nützlich, wenn innere Ausnahmen aus einer AggregateException-Instanz entpackt werden, nachdem die C#-Sprachfunktion „await“ verwendet wurde. Es stellt sicher, dass Stack-Trace-Informationen während der asynchronen Programmierung nicht verloren gehen.

Das obige ist der detaillierte Inhalt vonWie kann ich Stack-Traces beim erneuten Auslösen von Ausnahmen in C# beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage