日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET 5 程序高级调试-WinDbg

發布時間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .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調試器擴展

總結

以上是生活随笔為你收集整理的.NET 5 程序高级调试-WinDbg的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。