首页 > 后端开发 > C++ > 在 C# 中重新抛出 InnerException 时如何保留堆栈跟踪?

在 C# 中重新抛出 InnerException 时如何保留堆栈跟踪?

DDD
发布: 2025-01-17 07:17:09
原创
808 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板