首页 > 其他分享 >转:Visual Studio如何调试异步代码

转:Visual Studio如何调试异步代码

时间:2023-05-26 13:23:14浏览次数:45  
标签:异步 窗口 代码 Visual Studio 线程 调试

转自:https://www.duidaima.com/Group/Topic/ASP.NET/10666

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

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

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

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

在异步编程时,确定抛出异常的源头往往是令人沮丧的。当一个异常被多次抛出,Visual Studio 通常返回调用堆栈,其中的异常是最近通过 Exception Helper 抛出的。不幸的是,这并不总是有助于异步调试。为了解决这个问题,我们在 VS16.4 版本中实现了重新抛出异常。使用此更新,Exception Helper 将在重新抛出异常时显示原始调用堆栈。要了解更多关于这个新特性的信息,请查看 Andy Sterland 的博客文章(https://devblogs.microsoft.com/visualstudio/exception-helper-rethrown-exceptions )。
image

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

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

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

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

原文链接

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

标签:异步,窗口,代码,Visual,Studio,线程,调试
From: https://www.cnblogs.com/Ceri/p/17434457.html

相关文章

  • 【java】同步异步和多线程编程
    Java基本概念并发基于时间段内的,同时发生(处理多个任务的能力,时间段)存在同步和互斥的问题(任务之间的时序问题)同步:前一个处理的结果作为下一个处理的资源(互相之间有依赖)互斥:不能同时使用临界资源。解决时序问题的机制:锁,信号量,原子操作Java中的多线程机制并行(完全......
  • 异步编程(Thread、ThreadPool、Task、异步关键字async/await)
    一、什么是异步Thread,是微软.Net1.0推出;ThreadPool 是微软.Net2.0推出;Task是微软.Net4.0推出;async/await是微软.Net5.0推出;       同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方......
  • JS的异步化特征async await
    参考:https://segmentfault.com/a/1190000007535316https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promisehttps://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/awaithttps://developer.mozilla.org/zh-CN/......
  • aiohttp 异步爬虫实战
    想检测一下内网开放8080端口提供http服务的计算机,写了以下代码:#导入requests包importrequests,pathlib#发送请求defreq(ip):try:print(ip)r=requests.get(ip,timeout=0.5)ifr.status_code==200:......
  • 多线程合集(三)---异步的那些事之自定义AsyncTaskMethodBuilder
    引言之前在上一篇文章中多线程合集(二)---异步的那些事,async和await原理抛析,我们从源码去分析了async和await如何运行,以及将编译后的IL代码写成了c#代码,以及实现自定义的Awaiter,自定义异步状态机同时将本系列的第一篇文章的自定义TaskScheduler和自定义的Awaiter......
  • Visual Source Safe---源代码管理工具
    一、VisualSourceSafe(简称VSS)       VSS是微软的产品,是配置管理的一种很好的入门级的工具。VSS最初的名字叫SourceSafe,是一家小公司的产品,92年曾经获了最佳小型管理工具奖,然后立即被微软收购。但是微软收购的只是sourcesafe的Windows版本,在美国还有另外两家公司......
  • 各个版本Microsoft Visual C++官方下载链接
     MicrosoftVisualC++2005MicrosoftVisualC++2005RedistributablePackage(32位)http://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.exeMicrosoftVisualC++2005RedistributablePackage(64位)http://download.......
  • Java开启异步的两种方式
    二、Java开启异步的两种方式1、注解开启:@Async1.1、配置异步的线程池必须配置异步线程池,否则异步不会生效。@EnableAsync注解:指定异步线程池。不指定默认使用:SimpleAsyncTaskExecutor线程池SimpleAsyncTaskExecutor是一个最简单的线程池,它没有任何的线程相关参数配置,它会为......
  • Visual Studio Code (vscode)自定义用户代码段快速打出for循环等
    比如fori这样的快捷键就打不出代码块了自定义用户代码块的方法:工具栏>文件>首选项>用户代码片段  然后在弹出的搜索框中填写javascript.json有提示不用打全就行(会有javascript选中)  打开配置文件javascript.json这里面显示的就是编写代码块的例子"P......
  • AI Studio 基本操作
    https://aistudio.baidu.com/aistudio/projectdetail/6182202项目启停执行和调试添加代码或文件运行代码%cd/home/aistudio%runwork/SampleOfRun.py!pythonwork/SampleOfRun.py快捷健Debug调试器下一行->n打印->p动态添加断点->b动态分配变量......