【译】Exception Helper – Rethrown Exceptions
是否曾经在异步编程时引发过异常?因为调试器没有显示异常发生的位置而感到沮丧?或者在查看具有内部异常的异常时感到沮丧?调试器不容易显示该异常来自何处。从 Visual Studio 2019 16.5 版本开始,异常帮助器现在包含了重新抛出的异常的原始调用堆栈功能。这有助于找出代码中任何重新抛出异常的根本原因。这在异步异常的情况下尤其有用,异步异常被框架代码捕获并重新抛出。

上面的截图来自一个简单的程序,该程序使用'await'模式。
tatic async Task Main(string[] args)
{
await a();
}
async static Task<string> a()
{
return await b();
}
async static Task<string> b()
{
return await c();
}
async static Task<string> c()
{
string s = null;
return await Task<string>.FromResult(s.ToLower());
}
在本例中,异常在 s.ToLower() 处抛出,异常在 await a() 处变为“未处理”,并且由于 await 在C#中的工作方式,调试器将停止。不幸的是,所有有用的信息都回到了 c() 中。现在,随着 Visual Studio 2019 16.5 中的更改,您可以在调用堆栈中看到异常帮助器中最初抛出异常的位置。

在本例中,您可以单击 Program.cs,链接并导航到调用堆栈顶部ConsoleApp5.Program.c()中的源位置,然后设置一个断点,以便下次运行场景时命中。然后,当遇到断点时,您将被停止在异常产生的位置,以及您可能希望进一步的调试,并尝试修改以修复问题。
虽然可以使用此功能导航到正确的源代码,但不能使用监视来检查应用程序的状态,就像最初抛出异常时一样。这仅仅是因为自那时起其他代码已经运行,这可能会改变应用程序的状态。但是,如果您使用的是 Visual Studio 2019 Enterprise,则还有另一个选项 IntelliTrace。
IntelliTrace
使用 IntelliTrace,VS 将在某些点捕获应用程序的状态,包括引发异常时,您可以返回并检查以前的状态。最简单的方法是查看诊断工具窗口的"事件"选项卡。在事件选项卡中,您将看到每个异常的事件。在此异步示例中,每个异步方法都有相应的引发和捕获的异常事件。如果您单击其中任何一个,IntelliTrace 会将调试器带回该时间点,您可以使用监视窗口检查状态。

除了大多数例外情况外,您可能想要转到第一个实例,因为那是它第一次引发的地方。值得一提的是,并不是所有的状态都针对每个异常被捕获,诸如局部变量和参数之类。如果要在监视窗口中输入新表达式,它可能不会计算。如果要捕获应用程序的所有状态,应启用 IntelliTrace 快照功能。您可以通过访问 Tools Options -> IntelliTrace 并启用"IntelliTrace snapshots(managed and native)"来执行此操作,如下所示。

使用 IntelliTrace 快照捕获应用程序的整个状态,您可以通过局部变量和监视窗口检查应用程序中的任何内容。
原文链接
https://devblogs.microsoft.com/visualstudio/exception-helper-rethrown-exceptions/
【译】Exception Helper – Rethrown Exceptions的更多相关文章
- Java Exception & RTTI
Exception Try { ... ... } catch (Exception ex) { …; throw new Throwable(ex); } catch (Throwable ex) ...
- JAVA fundamentals of exception handling mechanism
Agenda Three Categories Of Exceptions Exceptions Hierarchy try-catch-finally block The try-with-reso ...
- Error Handling and Exception
The default error handling in PHP is very simple.An error message with filename, line number and a m ...
- JMS - Exceptions
The JMSException JMS defines JMSException as the root class for exceptions thrown by JMS methods. JM ...
- [译]Serilog Tutorial
在过去的几年中,结构化日志已经大受欢迎.而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它. 0. 内容 设定目标 认识Serilog 事件和级 ...
- [译]Async/Await - Best Practices in Asynchronous Programming
原文 避免async void async void异步方法只有一个目的:使得event handler异步可行,也就是说async void只能用于event handler. async void ...
- 写出简洁的Python代码: 使用Exceptions(转)
add by zhj: 非常好的文章,异常在Python的核心代码中使用的非常广泛,超出一般人的想象,比如迭代器中,当我们用for遍历一个可迭代对象时, Python是如何判断遍历结束的呢?是使用的S ...
- Handling Errors and Exceptions
http://delphi.about.com/od/objectpascalide/a/errorexception.htm Unfortunately, building applications ...
- WebDriver API——第2部分Exceptions
Exceptions that may happen in all the webdriver code. exception selenium.common.exceptions.ElementNo ...
随机推荐
- Hive的压缩存储和简单优化
一.Hive的压缩和存储 1,MapReduce支持的压缩编码 压缩格式 工具 算法 文件扩展名 是否可切分 对应的编码/解码器 DEFLATE 无 DEFLATE .deflate 否 org.ap ...
- mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比,于是写了个插件。
使用mybatis逆向工程的时候,delete方法的使用姿势不对,导致表被清空了,在生产上一刷新后发现表里没数据了,一股凉意从脚板心直冲天灵盖. 于是开发了一个拦截器,并写下这篇文章记录并分享. 这锅 ...
- 关于adb的下载和基本使用
我们无论是开发还是测试,对Android SDK一定都不陌生,如果我们要使用adb(Android debug bridge)命令,那么这个就必不可少了. 1.给大家提供一个下载地址:https:// ...
- Markdown 主题修改
加粗字体的颜色修改 strong, b{ color: #111111; } 斜体的颜色修改 em, i { color: #111111; } 高亮字体的背景颜色修改 #write mark { b ...
- GatewayWorker与ThinkPHP等框架结合
使用GatewayWorker时开发者最关心的是如何与现有mvc框架(ThinkPHP Yii laravel等)整合,以下是官方推荐的整合方式. 见示意图: ## 总体原则 现有mvc框架项目与Ga ...
- Nice Jquery Validator 自定义规则
规则定义方式 (1). 正则 适用于使用单个正则能搞定的验证. // 使用数组包裹正则和错误消息,规则不通过时提示该消息 mobile: [/^1[3458]\d{9}$/, '请检查手机号格式'] ...
- DockerFile构建镜像和Docker仓库
利用commit理解镜像构成 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现 场等.但是,不要使用 docker commit 定制镜像,定制镜像应该 ...
- mitmdump+python的使用(代码篇)
mitmproxy+python代码篇 一.上个推文我们介绍了mitmdump的简单操作,下面我们开始学习,mitmdump配合python脚本的使用.第一点先讲日志输出.请看图片 先导入ctx模块: ...
- (六)maven 聚合和继承
项目目录 my_test 聚合pom <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- 小师妹学JVM之:深入理解JIT和编译优化-你看不懂系列
目录 简介 JIT编译器 Tiered Compilation分层编译 OSR(On-Stack Replacement) Deoptimization 常见的编译优化举例 Inlining内联 Br ...