【译】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 ...
随机推荐
- 温故知新-java虚拟机
文章目录 java虚拟机是什么? jvm的体系结构 第一个类加载子系统 类的生命周期 加载器分类 类加载机制 第二个运行时数据区(内存结构) GC算法和收集器 如何判断对象可以被回收? 如何判断一个常 ...
- 在scrapy的spiders文件中设置请求时间间隔
设置某个spider单独使用的设置项等等. 在spiders文件中写如下: custom_settings = { 'DOWNLOAD_DELAY': 0.2, 'CONCURRENT_REQUEST ...
- 使用PyQtGraph绘制数据滚动图形(4)
app = pg.QtGui.QApplication([]) win = pg.GraphicsWindow(title="数据滚动") win.resize(600,300) ...
- jQuery实现购物车商品数量及总价的计算
记录一下项目中遇到的计算购物车商品数量和总价的jQuery代码,重点在于选择器以及.text()命令的使用. 先上效果图,点击加减,商品数量以及总价会发生相应变化. html代码: <div c ...
- 在SpringMVC获取客户端传递的数据的方式
在处理请求的方法中,加入相对应的形参,保证形参参数名和传递的数据的参数名保持一致,就能够自动赋值 value:当不满足赋值条件时,可以使用value属性,指定映射关系 required:设置形参是否必 ...
- GitHub 热点速览 Vol.24:程序员自我增值,优雅赚零花钱
摘要:升职加薪,出任 CTO,迎娶白富美/高帅富,走向人生巅峰是很多人的梦想.在本期的热点速览中你将了解自由作者 Easy 如何优雅赚取零花钱的方法,以及定投改变命运 -- 让时间陪你慢慢变富.说到程 ...
- 怎样在LaTeX中使用中文
因为疫情在家中上课,作业提交都必须使用PDF.反正时间充裕,不如趁机回顾一下LaTeX的使用. 之前一直用的是Vimtex,但是感觉还是不太方便,于是改用了Texpad.Texpad的强大之处在于它支 ...
- TCP和UDP的Socket编程实验
Linux Socket 函数库是从 Berkeley 大学开发的 BSD UNIX 系统中移植过来的.BSD Socket 接口是在众多 Unix 系统中被广泛支持的 TCP/IP 通信接口,Lin ...
- 使用numpy生成二维正态分布
参考资料: https://www.zhihu.com/question/39823283?sort=created https://www.zhihu.com/question/288946037/ ...
- pikachu 搭建
一:首先下载XAMPP 1.先到官方网站安装XAMPP https://www.apachefriends.org/zh_cn/index.html 选择适合自己的电脑系统下载,本次windows系 ...