本文為 Dennis Gao 原創技術文章,發表于博客園博客,未經作者本人允許禁止任何形式的轉載。
系列博文
《WinDbg 命令三部曲:(一)WinDbg 命令手冊》
《WinDbg 命令三部曲:(二)WinDbg SOS 擴展命令手冊》
《WinDbg 命令三部曲:(三)WinDbg SOSEX 擴展命令手冊》
導航目錄
SOSEX 調試命令手冊
擴展加載命令
命令
描述
.load
.load sosex
.load C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\sosex.dll
SOSEX擴展命令
命令
描述
!bhi
!bhi [filename] BuildHeapIndex 用于對 GC 堆內的對象構建一個索引文件。
這將使 !gcroot 和 !refs 命令工作的更加快速。
索引內容將被存儲到給定的文件名的文件中。
如果未指定文件名,則默認的文件名為 %dumppath%\%dumpname%_heapindex.bin 。
!chi
!chi ClearHeapIndex 釋放堆索引使用的所有資源,并從內存中移除。
!dlk
!dlk [-d] 檢測 SynczBlock 死鎖。
-d 同時也檢測 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生類。
!dumpfd
!dumpfd <FieldAddr> 顯示 FieldDef 結構的屬性值。
!dumpgen
!dumpgen <intGenNum> [-free] [-stat] [-type <TYPE_NAME>] [-nostrings]
以如下格式顯示指定代的內容:
hexAddr decSize strTypeName
-nostrings 不顯示對象名稱或字符串數據。
-free 僅包括 FREE 的對象類型。
-stat 僅顯示一個綜合的統計。
-type 僅包含類型名稱字符串中包含給定子字符串的對象數據。
!finq
!finq [GenNum] [-stat] 顯示終結化隊列中的對象,并根據代來分類。
GenNum 給定的代(generation)。
-stat 顯示統計信息。
!frq
!frq [-stat] 顯示可達隊列(Freachable Queue)中的對象。
!gcgen
!gcgen <hexObjectAddr> 獲取給定對象在 GC Heap 中的代數。如果對象在 LOH 中,則會提示 “Large Object Heap”。
!gch
!gch [-HandleType] [-stat] 列出所有 GCHandle 實例。
-HandleType 指定句柄的類型。 !gch -Pinned -Strong
-stat 根據句柄類型進行統計。
有效的類型有:
WeakShort
WeakLong
Strong
Pinned
Variable
RefCounted
AsyncPinned
!lhi
!lhi [filename] LoadHeapIndex 從給定的文件中加載堆索引。
如果未指定文件名稱,則默認的文件名稱為 %dumppath%\%dumpname%_heapindex.bin。
!mbc
!mbc <Managed Breakpoint ID | *> 移除指定 ID 的斷點。* 為移除全部。
!mbd
!mbd <Managed Breakpoint ID | *> 使失效,但不移除斷點。
!mbe
!mbe <Managed Breakpoint ID | *> 使斷點生效。
!mbl
!mbl <Managed Breakpoint ID> 顯示給定 ID 的斷點,或列出所有托管斷點及其狀態。
!mbm
!mbm <method filter> [ILOffset] [Options] 在指定的方法及偏移處設置斷點。
!mdso
!mdso [Options] 顯示在當前上下文中,對象在棧上和 CPU 寄存器中的引用。
/a 顯示棧上所有對象的引用。
/r 僅顯示寄存器中的對象。
/c:n 限定顯示的對象的數量為 n。
/t:typeFilter 限制顯示的對象的類型。
/mt:MT 限制顯示的對象為指定的方法表。
!mdt
!mdt [typename | paramname | localname | MT] [ADDR] [-r[:level]] [-e[:level]] [-start:index] [-count:n]
顯示指定對象或類型的字段信息。
-r 遞歸顯示字段信息。
-e 指定的類型將被擴展。
!mdv
!mdv [nFrameNum] 顯示當前幀中的參數或局部變量的信息。幀來自 !mframe 命令。
!mfrag
!mfrag [-stat] [-mt:<MT>] 輸出空閑的塊報告。
-stat 顯示統計報告
-mt:MT 僅顯示碎片信息
!mframe
!mframe [frame number] 為 !mdt 或 !mdv 命令設置當前的托管幀。
!mgu
!mgu 返回在當前調用棧中最后一個托管調用者的當前位置。
!mk
!mk [-l] [-p] [-a] [-c] [-cc] 顯示調用棧中托管和非托管幀的組合。
-l 顯示局部變量
-p 顯示參數
-a 顯示局部變量和參數(Locals + Parameters)
-c 清理
-cc 清理,同時也拆解名空間。
!mln
!mln [address expression] 顯示給定地址處的 CLR 數據類型。
!mlocks
!mlocks [-d] 顯示線程中所有的托管鎖對象和 CriticalSections 對象。
-d 同樣搜索 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生類。
!mroot
!mroot <ObjectAddr> [-all] 顯示指定對象的 GC 根。
通常情況,僅顯示第一個 Root 路徑。
-all 顯示所有的路徑,這可能會耗費較長的時間。
!mt
!mt 步進至當前位置的托管方法。
!mu
!mu [address] [-s] [-il] [-n] 顯示托管和非托管反匯編的交叉信息。
-s 顯示源代碼,如果可用。
-il 顯示 IL 反匯編程序。
-n 顯示原生的反匯編程序。
默認情況為 IL 和 Native 均顯示。
!muf
!muf [MD Address | CodeAddress] [-s] [-il] [-n] 根據給定的 MD 信息進行反匯編,并顯示交叉信息。
-s 顯示源代碼,如果可用。
-il 顯示 IL 反匯編程序。
-n 顯示原生的反匯編程序。
默認情況為 IL 和 Native 均顯示。
!mwaits
!mwaits [-d | LockAddr] 顯示所有正在等待的線程。如果可知的話,同時顯示正在等待的鎖的信息。
-d 同樣搜索 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生類。
LockAddr 列出所有等待該地址鎖的線程。
-d 和 LockAddr 選項是互斥的。
!mx
!mx <Filter String> 顯示任意匹配的類型、方法、字段等。
!rcw
!rcw [Object or SyncBlock Addr] 顯示 RuntimeCallableWrapper 數據。
!refs
!refs <hexObjectAddr> [-target|-source] 列出指定對象的所有的引用。
-source 僅顯示指定對象所持有的引用。
-target 僅顯示持有指定對象的引用。
格式化的輸出采用如下格式:
hexAddr decSize strTypeName
!rwlock
!rwlock [ObjectAddr | -d] 顯示所有的 RWLock。如果給定 RWLock 地址,則顯示該鎖的詳細信息。
-d 同樣搜索 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生類。
!strings
!strings [ModuleAddress] [Options] 在托管堆或指定的模塊中搜索匹配的字符串信息。
可選項:
g:<min gen> 列出指定 GC 代數中的字符串。有效的參數為 0、1、2 和 3(LOH)。
m:<match filter> 顯示指定匹配規則的字符串。
n:<min length> 顯示字符串的長度的最小值。
x:<max length> 顯示字符串的長度的最大值。
參考資料
本文為 Dennis Gao 原創技術文章,發表于博客園博客,未經作者本人允許禁止任何形式的轉載。
系列博文
《WinDbg 命令三部曲:(一)WinDbg 命令手冊》
《WinDbg 命令三部曲:(二)WinDbg SOS 擴展命令手冊》
《WinDbg 命令三部曲:(三)WinDbg SOSEX 擴展命令手冊》