zoukankan      html  css  js  c++  java
  • 【译】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/

  • 相关阅读:
    leetcode 13. Roman to Integer
    python 判断是否为有效域名
    leetcode 169. Majority Element
    leetcode 733. Flood Fill
    最大信息系数——检测变量之间非线性相关性
    leetcode 453. Minimum Moves to Equal Array Elements
    leetcode 492. Construct the Rectangle
    leetcode 598. Range Addition II
    leetcode 349. Intersection of Two Arrays
    leetcode 171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/MeteorSeed/p/13264474.html
Copyright © 2011-2022 走看看