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/

  • 相关阅读:
    不同环境下vue-cli3+打包命令配置
    本地node服务启动vue打包项目
    js匿名函数
    本地vue扩展程序。
    vant轮播插件swipe实现三个一屏,并修改指示器样式
    vue中placeholder中使用字体图标
    为什么js中重复多次调用正则时会报错,会交替出现的那种
    create-react-app兼容ie9配置
    react之form表单工具:formik+yup
    Flex布局
  • 原文地址:https://www.cnblogs.com/MeteorSeed/p/13264474.html
Copyright © 2011-2022 走看看