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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

利用SOS扩展库进入高阶.NET6程序的调试

發(fā)布時(shí)間:2023/12/4 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用SOS扩展库进入高阶.NET6程序的调试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有時(shí)候我們可能想深入到程序的運(yùn)行核心,去觀察下內(nèi)存分配情況以及堆棧內(nèi)保存的東東,那么作為編程新貴的底層框架.NET6,又為我們提供了什么可用的觀測工具呢?

1.SOS 擴(kuò)展是什么?

SOS擴(kuò)展庫是Windows 附帶的調(diào)試擴(kuò)展庫,它允許開發(fā)人員在 WinDbg、CDB 或 NTSD 中調(diào)試托管代碼,請記住,當(dāng)您執(zhí)行托管二進(jìn)制文件時(shí),運(yùn)行時(shí)會生成特定于平臺的本機(jī)代碼,而SOS 擴(kuò)展允許您以“托管方式”調(diào)試本機(jī)代碼。

最最主要的是,SOS 調(diào)試擴(kuò)展允許您查看有關(guān)在** .NET Core 運(yùn)行時(shí)**運(yùn)行的代碼的信息,包括實(shí)時(shí)進(jìn)程和轉(zhuǎn)儲文件。

2. SOS支持跨平臺嗎?

是的,sos已經(jīng)有mac、liunx和windows上的各個(gè)版本,它們支持不同的內(nèi)核核心,可以用到不同的平臺上進(jìn)行擴(kuò)展調(diào)試。

3.如何開始使用SOS?

sos擴(kuò)展必須附加到別的調(diào)試工具上,因此其并不能獨(dú)立運(yùn)行。

為了調(diào)試.net 6程序,我們分別在不同的平臺使用不同的工具進(jìn)行演示。

3.1 Linux平臺上使用LLDB工具

第一步是安裝調(diào)試器LLDB。LLDB 與 WinDbg 非常相似,也是 SOS 團(tuán)隊(duì)一直在使用的調(diào)試器,因此我采用它作為 Linux 的默認(rèn)調(diào)試器。

您可以從以下鏈接安裝 LLDB:

https://lldb.llvm.org/download.html

或者您也可以通過運(yùn)行以下命令來安裝它:

yum install lldb

在 Linux 機(jī)器上安裝 lldb 后,打開終端 并通過在提示符下鍵入以下命令來啟動調(diào)試器:

lldb

如果 lldb 已正確啟動,您將獲得如下所示的 lldb 提示。

3.2 Linux 平臺安裝sos

沒有sos擴(kuò)展的加持,你是無法調(diào)試.NET程序的,因此還需要安裝sos擴(kuò)展。目前dotnet提供了簡易安裝方式,我們只需要錄入下列命令即可。

dotnet tool install --global dotnet-sos dotnet-sos install

默認(rèn)安裝的sos是和你cpu架構(gòu)一致的版本,如果你需要其他版本,可以指定參數(shù)進(jìn)行安裝。
參數(shù)有下列值可用。

  • Arm

  • Arm64

  • X86

  • X64

例如:

dotnet-sos install --architecture Arm

在Linux系統(tǒng)中安裝完sos后,再次啟動LLDB,會默認(rèn)加載sos擴(kuò)展的。

3.3 利用LLDB調(diào)試程序

先啟動.net 程序,然后利用ps查找進(jìn)程號。

ps -ef | grep dotnet

然后啟動lldb

lldb

在lldb命令界面內(nèi)鍵入附加進(jìn)程命令:

process attach -p 31339

附加dotnet程序進(jìn)程到分析空間。

Process 31339 stopped

Executable module set to “/tmp/dotnet/bin/Debug/net5.0/dotnet”.

Architecture set to: x86_64–linux-gnu.

一旦附加到 lldb后,就可以顯示線程列表。

您可以運(yùn)行使用bt命令來檢索當(dāng)前線程的調(diào)用堆棧,但是很難調(diào)試它,因?yàn)槟鸁o法以“托管方式”查看堆棧.

為了測試,讓我們運(yùn)行clrstack命令,現(xiàn)在我們可以更好地了解正在發(fā)生的事情。

我們還可以運(yùn)行其他 SOS 命令(如clrThreads)?來找出所有管理線程,為此我們輸入:

sos clrThreads

如果您想自己嘗試其他 SOS 命令,它們會列在 .?NET 框架文檔

希望這對你有用!

3.4 Windows上調(diào)試的支持

還可以通過將 SOS 調(diào)試擴(kuò)展加載到 WinDbg/dbg 調(diào)試程序中并在 Windows 調(diào)試程序中執(zhí)行命令來使用此擴(kuò)展。可對實(shí)時(shí)進(jìn)程或轉(zhuǎn)儲使用 SOS 命令。

歡迎嘗試Windbg 預(yù)覽版【微軟商店】,千年不變的界面終于煥然一新。


安裝sos依然是這些命令:

dotnet tool install --global dotnet-sos dotnet-sos install

安裝后,可以在windbg內(nèi)加載它

. Load %userprofile%\.Dotnet\SOS\sos.dll

然后在任務(wù)管理器中找到這個(gè)進(jìn)程,保存dump文件到臨時(shí)目錄,利用windbg打開,并加載sos.dll.

!clrstack -a

當(dāng)然你可以根據(jù)需要鍵入不同的調(diào)試命令進(jìn)行跟蹤分析。

!runaway !threadpool !continue !syncblk

4. 小結(jié)

高階調(diào)試是不是把你學(xué)fei了?恩,學(xué)這個(gè)跟下篇文章有些瓜葛,因此不得不先介紹下調(diào)試器的使用。

👓都看到這了,還在乎點(diǎn)個(gè)贊嗎?

👓都點(diǎn)贊了,還在乎一個(gè)收藏嗎?

👓都收藏了,還在乎一個(gè)評論嗎?

總結(jié)

以上是生活随笔為你收集整理的利用SOS扩展库进入高阶.NET6程序的调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。