虽然异步代码可以提高程序的整体吞吐量,但异步代码仍然无法免除错误!当潜在的死锁、模糊的错误消息以及查找导致 Bug 的 Task 时,编写异步代码会使调试更加困难。幸运的是,Visual Studio 具有与托管的、本地的和 JavaScript 兼容的多个新旧功能,可帮助缓解调试异步代码的挫折感。下面,让我们开始吧。

在哪里可以看到程序的所有Task

  当你在异步编程时遇到 bug,你可能想看下你所有的 Task,然后确定到底是哪出错了。如果你调试过多线程应用,你可能会对“Threads”窗口比较熟悉。好消息,对于 Task 来说也是等效的窗口。“Tasks”窗口允许你产看所有任务,显示它们的 id、当前位置、最初传递给它们的方法以及它们在中断时的当前状态(active 活动的、scheduled 计划的、blocked 阻塞的或 deadlocked 死锁的)。如果你的程序是多线程的,此窗口还将显示运行每个任务的线程。这有助于识别可能导致问题的特定线程。

  可以在 Debug > Windows > Task 或者使用 CTRL+SHIFT+D, K 来访问 Tasks 窗口。

如何在我的异步代码中定位异常的源头

  在异步编程时,确定抛出异常的源头往往是令人沮丧的。当一个异常被多次抛出,Visual Studio 通常返回调用堆栈,其中的异常是最近通过Exception Helper 抛出的。不幸的是,这并不总是有助于异步调试。为了解决这个问题,我们在 VS16.4 版本中实现了重新抛出异常。使用此更新,Exception Helper 将在重新抛出异常时显示原始调用堆栈。

有没有办法更好地可视化任务和异步代码流?

  对于异步代码执行的图形化描述,Visual Studio 具有线程和任务的并行堆栈(Parallel Stacks)窗口。对 Visual Studio 16.6 进行了改进,任务的并行堆栈窗口(或并行任务窗口(Parallel Tasks))直观地显示活动、等待和计划的任务以及它们之间的关系。双击活动任务或等待任务,将在“调用堆栈(Call Stack)”窗口中显示异步调用堆栈。若要了解哪个线程正在运行特定任务,可以在“并行线程(Parallel Threads)”和“并行任务(Parallel Tasks)”窗口之间进行交换。可以通过右键单击并在上下文菜单中选择“转到线程(Go To Thread)”来完成此操作。

准备好使用这些工具来调试异步代码了吗?

现在你有了更多的工具来帮助你调试代码,和我们分享你的反馈吧!您的想法和功能建议将帮助我们创建最好的异步调试体验。

原文链接

  https://devblogs.microsoft.com/visualstudio/how-do-i-debug-async-code-in-visual-studio/?utm_source=vs_developer_news&utm_medium=referral

【译】如何在 Visual Studio 中调试异步代码的更多相关文章

  1. [译]如何在visual studio中调试Javascript

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  2. 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...

  3. 在Chrome+Visual Studio中调试asp.net程序很慢的问题(Firefox也有类似问题)

    在Chrome+Visual Studio中调试asp.net程序很慢的问题(Firefox也有类似问题) 今天开始起在Chrome中调试,发现问题主要出在菜单栏(layout文件)中,google了 ...

  4. [转]如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    本文转自:http://www.cnblogs.com/stg609/p/3673782.html 开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framew ...

  5. 如何在Visual Studio中选择C++和C#的编译器版本

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Visual Studio中选择C++和C#的编译器版本.

  6. [No0000AE]在 Visual Studio 中调试 XAML 设计时异常

    在 Visual Studio 中进行 WPF, UWP, Silverlight 开发时,经常会遇到 XAML 设计器由于遭遇异常而无法正常显示设计器视图的情况.很多时候由于最终生成的项目在运行时并 ...

  7. 在 Visual Studio 中调试时映射调用堆栈上的方法

    本文转自:https://msdn.microsoft.com/zh-cn/library/dn194476.aspx 1.创建代码图,以便在调试时对调用堆栈进行可视化跟踪. 你可以在图中进行标注以跟 ...

  8. 在 Visual Studio 中调试 XAML 设计时异常

    在 Visual Studio 中进行 WPF, UWP, Silverlight 开发时,经常会遇到 XAML 设计器由于遭遇异常而无法正常显示设计器视图的情况.很多时候由于最终生成的项目在运行时并 ...

  9. 使用visual studio code调试php代码

    这回使用visual studio code折腾php代码的调试,又是一顿折腾,无论如何都进不了断点.好在就要放弃使用visual studio code工具的时候,折腾好了,汗~ 这里把步骤记录下来 ...

  10. [置顶] 如何在Python IDLE中调试Python代码?

    好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...

随机推荐

  1. Golang defer使用

    学习于https://www.liwenzhou.com/posts/Go/function/的文章 1. defer的执行顺序类似于栈,"后进先出",也就是最先defer的语句最 ...

  2. 机器学习06-(支持向量机SVM、网格搜索、文本分词、词袋模型、词频、文本分类-主题识别)

    机器学习-06 机器学习-06 支持向量机(SVM) 支持向量机原理 网格搜索 情感分析 文本分词 词袋模型 词频(TF) 文档频率(DF) 逆文档频率(IDF) 词频-逆文档频率(TF-IDF) 文 ...

  3. Django笔记三十三之缓存操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十三之缓存操作 这一节介绍一下如何在 Django 中使用 redis 做缓存操作. 在 Django 中可以有很多种方式做缓存,比如数 ...

  4. Istio数据面新模式:Ambient Mesh技术解析

    摘要:Ambient Mesh以一种更符合大规模落地要求的形态出现,克服了大多数Sidecar模式的固有缺陷,让用户无需再感知网格相关组件,真正将网格下沉为基础设施. 本文分享自华为云社区<华为 ...

  5. sqlilabs第一关

    首先打开网页,进行注入点的测试 输入?id=1 and 1=1发现1=2的时候没有进行报错,有两种可能,一种是不能注入,第二种是字符型可以通过对字符型里面的''进行闭合,输入'and 1=1--+发现 ...

  6. 模块 ""element-plus"" 没有导出的成员 "ElMessage"。你是想改用 "import ElMessage from "element-plus"" 吗?

    背景:在使用Element Plus写demo时,导入ElMessage组件出现 [模块 ""element-plus"" 没有导出的成员 "ElMe ...

  7. 自动化部署(Gitlab)

    小程序可持续化自动部署 一.安装gitlab-runner 官方地址:https://docs.gitlab.com/runner/install/ windows安装如下: nodejs的环境变量一 ...

  8. 简单工厂模式(Static Factory Method)

    创建性设计模式--简单工厂模式(Static Factory method) 模式动机 只需要知道参数的名字则可得到相应的对象 软件开发时,有时需要创建一些来自于相同父类的类的实例.可以专门定义一个类 ...

  9. VUE旅程(2)

    继续我的vue踩坑之旅... 电商网站都会有搜索栏,输入内容后在搜索结果页面要带入搜索的关键字,需求就从这里来.代码如下: <v-search :keyword="this.$rout ...

  10. 2022-03-26:给定一个无向图, 从任何一个点x出发,比如有一条路径: x -> a -> b -> c -> y, 这条路径上有5个点并且5个点都不一样的话,我们说(x,a,b,c,y)是一条

    2022-03-26:给定一个无向图, 从任何一个点x出发,比如有一条路径: x -> a -> b -> c -> y, 这条路径上有5个点并且5个点都不一样的话,我们说(x ...