.NET 5 程序高级调试-WinDbg

上周和大家分享了.NET 5开源工作流框架elsa,程序跑起来后,想看一下后台线程的执行情况。抓了个进程Dump后,使用WinDbg调试,加载SOS调试器扩展,结果无法正常使用了:

0:000> .loadby sos clr
Unable to find module 'clr'

这引起了个人的兴趣,必须要重新掌握.NET 5 / .NET Core 下WinDbg调试技能。那么,我们就开始吧:

一、先安装WinDbg

推荐的下载链接(老版本的WinDbg):https://raw.githubusercontent.com/EasyDarwin/Tools/master/Windbg_x86_x64/dbg_amd64.msi

如果各位想尝鲜,也可以从Windows Store下载 WingDbg Preview版本

 下载后,一步一步安装即可。

 

 启动后的界面:

 

二、安装最新版本的dotnet-sos

  使用SOS调试器扩展,可以使用本地调试器(WinDbg、lldb)调试.NET Core 程序。

  推荐大家详细学习参考这篇文档:dotnet-sos install

  关于SOS调试器扩展,推荐大家看这篇链接:SOS调试器扩展

  我们使用dotnet global tool 下载安装最新的dotnet-sos Nuget包

  

    dotnet tool install --global dotnet-sos

   

   安装成功后,我们需要继续安装dotnet-sos 

   

   dotnet-sos install [--architecture <arch>]

    架构有以下选项:

  • Arm

  • Arm64

  • X86

  • X64

   

   安装完成后,有这么一条提示:

   Execute '.load C:\Users\zhougq\.dotnet\sos\sos.dll' to load SOS in your Windows debugger.

   总结以下:WinDbg or cdb by running .load %USERPROFILE%\.dotnet\sos\sos.dll in the debugger.

   原先我们使用.load by sos,在.NET Core 或者 .NET 5中需要直接按指定目录加载SOS调试器扩展了。

三、新建.NET 5应用,运行起来抓Dump

   调试环境ready后,我们启动.NET 5 WinDbg调试了

   首先我们找个.NET 5 Console应用(大家可以自己新建一个),这里我使用了上次研究elsa的测试工程了:

   

   测试代码:

 1 using Microsoft.Extensions.DependencyInjection;2 using Microsoft.Extensions.Hosting;3 using Microsoft.Extensions.Logging;4 using System;5 using System.Threading.Tasks;6 using Elsa.Activities.Console.Activities;7 using Elsa.Activities.Console.Extensions;8 using Elsa.Activities.Timers.Extensions;9 using Elsa.Expressions;
10 using Elsa.Extensions;
11 using Elsa.Services;
12 using NodaTime;
13 
14 namespace ElsaRecurringTaskWorkflow
15 {
16     using Elsa.Activities.Console.Extensions;
17 
18     class Program
19     {        
20         static async Task Main(string[] args)
21         {
22             var host = new HostBuilder()
23                 .ConfigureServices(ConfigureServices)
24                 .ConfigureLogging(logging => logging.AddConsole())
25                 .UseConsoleLifetime()
26                 .Build();
27 
28             using (host)
29             {
30                 await host.StartAsync();
31                 await host.WaitForShutdownAsync();
32             }
33         }
34 
35         private static void ConfigureServices(IServiceCollection services)
36         {            
37             services             
38                 .AddElsaCore()
39                 .AddConsoleActivities()             
40                 .AddTimerActivities(options => options.Configure(x => x.SweepInterval = Duration.FromSeconds(1)))
41                 .AddWorkflow<RecurringTaskWorkflow>();
42         }
43     }
44 }

  Run 跑起来:

 

 在Windows 任务管理器中抓个Dump

 

四、使用WinDbg调试.NET 5 应用

   在上一步中,我们抓了一个Dump文件:C:\Users\zhougq\AppData\Local\Temp\ElsaRecurringTaskWorkflow.DMP

   我们打开Windbg

   

   然后打开我们刚才抓的Dump文件:Open Dump File

   

首次打开会比较慢,WinDbg会尝试下载所需要的pdb调试符号,稍等一会即可。

 

下载复制完成后,我们就可以开始调试了:

首先,加载SOS扩展:

.load C:\Users\zhougq\.dotnet\sos\sos.dll

 

接下来,大家可以根据需要去不同的调试指令了,例如!runaway  !threadpool !syncblk等:

详细的WinDbg调试交差大家可以参考:

https://www.cnblogs.com/tianqing/p/11307049.html

[置顶] Windbg程序调试系列-索引篇

 

以上是使用WinDbg调试.NET 5的技术分享,下一篇将给大家继续分享Linux抓Dump分享的技能。

推荐几个不错的链接:

        dotnet-sos install

        SOS调试器扩展

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net在线编辑工具.NET Fiddle

介绍推荐工具&#xff1a;.NET Fiddle推荐理由&#xff1a;在线调试&#xff0c;编译&#xff0c;运行.net代码&#xff0c;同时支持C#&#xff0c;VB.NET&#xff0c;F#推荐说明&#xff1a;&#xff1a;对于.NET开发者来说是福音&#xff0c;因为我们可以不用再担心环境与庞大…

Typora markdown公式换行等号对齐_下了31个markdown编辑器,我就不信选不出一个好用的...

markdown编辑器测评标准总体标准渲染领域编辑领域数据管理其他TyporaVnoteMwebJoplinZettlrmacdownulyssesMarktextghostwriterfocusedbywordmarkedFarBoxNotablebear(熊掌笔记)iA writerMarxico(马克飞象)JetBrains系列的IDEsublime&#xff08;贫穷&#xff0c;没有插件&…

WSUS专题之二:部署与规划1

部署场景: 我们这里仅讨论和Internet完全物理隔离的企业内网的WSUS部署 Internet断开的WSUS服务器环境 部署WSUS服务时&#xff0c;并不要求你必须连接到Internet。对于没有连接到Internet的网络环境&#xff0c;你一样可以部署WSUS服务。通过在其他连接到Internet上的WSUS服务…

.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续交付/部署(CD)...

上一次演示了如何.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续集成&#xff08;CI&#xff09;&#xff0c;讲到这里我们push一下代码后就自动编译、自动跑单元测试、自动构建镜像、自动推送镜像到私仓。那么离我们最初设定的目标只差那么一小步…

spyder pyecharts不显示_我的显示器需要定时校色吗?

在对图像色彩有要求的领域中&#xff0c;显示器的色彩准确是相当重要的。专业的显示器&#xff0c;能够具有更大的色域&#xff0c;更大的色深&#xff0c;以及更精确的ΔE色准值。这也是一个专业显示器所应有的品质。但是&#xff0c;我们在讨论色彩准确性的同时&#xff0c;往…

外观模式(Façade Pattern)

概述 在软件开发系统中&#xff0c;客户程序经常会与复杂系统的内部子系统之间产生耦合&#xff0c;而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口&#xff1f;如何将复杂系统的内部子系统与客户程序之间的依赖解耦&#xff1f;这就是要说…

WTM5.0发布,全面支持.net5

点击上方蓝字关注我们WTM5.0全面支持.net5WTM5.0是WTM框架开源2年以来最大的一次升级&#xff0c;全面支持.net5&#xff0c;大幅重构了底层代码&#xff0c;针对广大用户提出的封装过度&#xff0c;不够灵活&#xff0c;性能不高等问题进行了彻底的修改。这次升级使WTM继续保持…

rsa 模数 指数转换 c语言_模数转换,你必须知道的8个经典ADC转换电路方案

模数转换器即A/D转换器&#xff0c;或简称ADC&#xff0c;通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义&#xff0c;仅仅表示一个相对大小。故任何一个模数转换器都需要一…

linux定时关机命令_win10电脑定时关机命令

电脑定时关机命令可以帮助用户们很好的去设置电脑自动关机等&#xff0c;自己无需操作&#xff0c;电脑也会在对应的时间自动关机&#xff0c;使用起来还是非常方便的&#xff0c;现在就来看看电脑定时关机命令教程吧~电脑定时关机命令是什么&#xff1a;一、CMD设置关机1、点击…

为你的项目启用可空引用类型

为你的项目启用可空引用类型IntroC# 从 8.0 开始引入了可空引用类型&#xff0c;我们可以为项目启用可空引用类型来借助编译器来帮助我们更好的处理代码中的空引用的处理&#xff0c;可以避免我们写很多不必要 null 检查&#xff0c;提高我们的效率Why为什么我们要启用可空引用…

有哪些编辑软件可以编辑c语言,可以推荐一个手机上最好用且免费的c语言编辑器吗?...

C4droid(又名C编译器)呗&#xff0c;一个既可以编辑&#xff0c;还可以运行C语言的手机编程软件&#xff0c;下面我简单介绍一下这个软件的安装和使用&#xff1a;1.首先&#xff0c;安装C4droid&#xff0c;这个直接在手机应用中搜索就行&#xff0c;如下&#xff0c;大概也就…

cas 4.2.7 官方手册_海城市地区,保险手册核验的简单流程

最近海城市社保正在进行保险手册的核验工作&#xff0c;据说是要将当地社保数据并网&#xff0c;由省社保机构监督管理。我们这个百万人口的县级市&#xff0c;核验工作只由一个部门在固定的办事大厅里完成&#xff0c;工作量也是相当大了。核验工作自9月末开始&#xff0c;已进…

在 C# 中生成代码的四种方式——包括.NET 5中的Source Generators

Microsoft在最新的C#版本中引入了Source Generator。这是一项新功能&#xff0c;可以让我们在代码编译时生成源代码。在本文中&#xff0c;我将介绍四种C#中的代码生成方式&#xff0c;以简化我们的日常工作。然后&#xff0c;您可以视情况选择正确的方法。在 .NET 中&#xff…

powercfg -h off_驭鲛记的主演会是谁?肖战关系特别好的艺人朋友呢?白敬亭和吴映洁有没有故事啊?高伟光是不是隐婚生子了?讲讲管h和马司令呗?...

近期后台提问的比较多&#xff0c;没被翻牌的小可爱们不要着急&#xff0c;我会尽力把大家的问题都照顾到&#xff0c;笔芯1. 扒扒&#xff0c;想知道华策驭鲛记的主演会是谁&#xff1f;主演还没定&#xff0c;女主在接触热巴&#xff0c;男主还没接触&#xff0c;这个戏明年才…

使用 C# 9 的records作为强类型ID - JSON序列化

使用 C# 9 的records作为强类型ID - 路由和查询参数在本系列的上一篇文章中使用 C# 9 的records作为强类型ID - 路由和查询参数&#xff0c;我们注意到强类型ID的实体&#xff0c;序列化为 JSON 的时候报错了&#xff0c;就像这样&#xff1a;{"id": {"value&qu…

HP LaserJet 1010卡纸解决方法

HP LaserJet 1010 系列打印机在打印过程中出现卡纸多由以下原因造成&#xff1a;1、纸盒里放入了过多的纸张或纸张位置没有放好。2、打印时使用的介质类型超出打印机的支持范围。常见卡纸位置&#xff1a;1 、硒鼓下方&#xff1b;2 、进纸口&#xff1b;3 、出纸口图 2&#x…

HP产品选件查询网站

[url]http://h18000.www1.hp.com/products/quickspecs/ProductBulletin.html#intro[/url][url]http://h18006.www1.hp.com/products/quickspecs/Division/12175.html[/url]所有的可通地此链接来查询DL380G5:[url]http://h18004.www1.hp.com/products/quickspecs/12477_div/1247…

如何使用 C# 中的 ValueTuple

Tuple 是一种数据结构&#xff0c;它由一个有序的、有限的、大小固定的、不可变的异构元素的序列组成&#xff0c;当我们说 Tuple 中的元素不可变&#xff0c;意味着其中的元素不能进行修改。ValueTuple 是在 C# 7 中被引入&#xff0c;它主要用来解决 Tuple 的两个问题。解决语…

tutte定理证明hall定理_人教社课本现低级错误?“爱因斯坦用相对论证明勾股定理”...

南方加客户端南方加客户端6月18日消息&#xff0c;近日&#xff0c;有网友在网上发帖称&#xff0c;人教版八年级下册数学自读课本中有关“爱因斯坦证明勾股定理”的内容疑似出现错误&#xff0c;此事引发网友关注&#xff0c;目前在社交平台上发酵。网友上传的课本图片据网友上…

在 “相对” 高薪面前,任何的喊冤叫屈都是苍白无力的

2021年刚开始&#xff0c;我的朋友圈就被一桩接着一桩的 “噩耗” 连番轰炸。1月1日&#xff0c;曾在《巴啦啦小魔仙》中饰演 “凌美琪” 的孙侨潞不幸去世&#xff0c;年仅25岁&#xff0c;死因是常年熬夜&#xff0c;再加上饮酒过量而导致的猝死。1月3日&#xff0c;我在网上…