文章出處

本文為 Dennis Gao 原創技術文章,發表于博客園博客,未經作者本人允許禁止任何形式的轉載。

系列博文

  1. 《WinDbg 命令三部曲:(一)WinDbg 命令手冊》
  2. 《WinDbg 命令三部曲:(二)WinDbg SOS 擴展命令手冊》
  3. 《WinDbg 命令三部曲:(三)WinDbg SOSEX 擴展命令手冊》

導航目錄

調試準備

為了測試 WinDbg 中使用 SOS 擴展命令,我創建了應用程序 "MemoryLeakApp.exe",Visual Studio 程序選擇為 64 位環境編譯。

 "MemoryLeakApp.exe" 啟動運行后可能占用內存600M。

此時,選擇使用 64 位 WinDbg 來調試程序。我們先通過 Attach Process 方式來調試。

當然,如果我們使用了 32 位的 WinDbg 去 Attach 進程,會直接報錯。

 

WinDbg 常用命令手冊

內置幫助命令
命令 描述
?

?             顯示常規命令

? /D            通過 DML(Debugging Markup Language) 方式顯示常規命令

.help

.help        顯示 . 系列命令

.help /D       通過 DML 方式顯示 . 系列命令

.help /D a*   通過 DML 方式顯示所有以 'a' 字母開頭的 . 系列命令

.chain

.chain          列出所有已加載的調試器擴展

.chain /D      通過 DML 方式列出所有已加載的調試器擴展

.extmatch

.extmatch /e ExtDLL FunctionFilter      顯示調試器擴展的所有導出函數

.extmatch /D /e ExtDLL FunctionFilter  通過 DML 方式顯示調試器擴展所有導出函數

.extmatch /D /e uext *                       顯示 uext 擴展中的所有導出函數

.hh

.hh         打開 WinDbg 的幫助文件

.hh Text  打開 WinDbg 的幫助文件,并自動搜索 Text 的內容

.hh dt     在 WinDbg 幫助文件中搜索 dt 命令

調試會話命令
命令 描述
.attach

.attach PID 附加到指定ID的進程

.detach

.detach      結束調試會話,被調試進程仍可繼續運行

q

q               結束調試會話,同時終止被調試進程的進行

qq             結束調試會話,同時終止被調試進程的進行

.restart

.restart      重啟被調試應用

一般信息命令
命令 描述
version

顯示調試器版本信息和已加載的調試器擴展

vercommand

顯示調試器啟動文件的路徑

vertarget

顯示目標機器的版本

CTRL+ALT+V

打開或關閉 Verbose 模式開關,某些命令在此模式下可以給出更多詳細信息

.formats

.formats Expression  顯示數字的各種格式信息

.formats 5

.cls

清理屏幕

.last event 顯示最新的異常信息或事件信息
.effmach

.effmach 顯示有效作用的機器信息
.effmach .
.effmach #
.effmach x86 | amd64 | ia64 | ebc

.time

顯示系統記錄的各種時間

.echo

.echo String  輸出字符串

.echo "String"

.echo "Hello World"

符號加載命令
命令 描述
ld

ld ModuleName  加載指定模塊的符號

ld *                  加載所有模塊的符號

!sym

!sym                獲取符號加載狀態

!sym noisy       讓調試器顯示符號搜索詳細信息

!sym quiet        默認項,不顯示符號搜索信息

.sympath

.sympath         顯示和設置符號搜索路徑

.sympath+       增加符號搜索路徑

.sympath+ C:\Symbols

.symopt

.symopt            顯示當前符號可選項

.symopt+ Flags  添加符號可選項

.symopt- Flags   移除符號可選項

.symfix

.symfix                           設置符號庫路徑

.sym+ DownstreamStore  添加符號庫路徑

x

x [Options] Module!Symbol    模式匹配符號信息

x /t ..            根據數據類型匹配

x /v ..            顯示詳細信息

x /a ..            按照地址排序

x /n ..            按照名稱排序

x /z ..            按照大小排序

x *!               列出所有模塊

x ntdll!*          列出 ntdll 模塊

x /t /v ntdll!*    列出 ntdll 模塊數據類型和符號類型

.reload

.reload                            重新加載符號信息

.reload [/f | /v]                /f 強制立即加載符號 /v 顯示詳細信息

.reload [/f | /v] Module     Module 為指定模塊加載符號信息

.reload /f @"ntdll.dll"

.reload /f @"C:\WINNT\System32\verifier.dll"

模塊加載命令
命令 描述
 lm

lm[ v | l | k | u | f ] [m Pattern] 顯示已加載的模塊

lm   顯示所有加載和未加載的模塊信息

lmv 顯示已加載模塊的詳細信息

lml  同時顯示加載的符號信息

lmk 顯示內核模塊信息

lmu 顯示用戶模塊信息

lmf  顯示鏡像路徑

lmm 匹配模塊名稱

lmD 使用 DML 方式顯示

lmv m kernel32 顯示 kernel32 模塊詳細信息

!dlls

!dlls         列出所有加載的模塊和加載數量

!dlls -i      根據初始化順序

!dlls -l      根據加載順序(默認項)

!dlls -m    根據內存順序

!dlls -v     顯示更多詳細信息

!dlls -c ModuleAddr  僅顯示 ModuleAddr 地址的模塊信息

!dlls -?     顯示幫助

!dlls -v -c kernel32 顯示 kernel32.dll 的信息

!lmi

!lmi Module    顯示模塊的詳細信息,包括加載符號信息

!lmi kernel32  顯示 kernel32.dll 模塊的信息

異常分析命令
命令 描述
!analyze

!analyze -v       顯示當前異常的詳細信息

!analyze -hang  診斷線程調用棧上是否有任何線程阻塞了其他線程

!analyze -f        查看異常分析信息,盡管調試器并未診斷出異常

進程信息命令
命令 描述
!dml_proc

通過 DML 方式顯示當前進程的信息

.tlist

顯示當前所有進程

線程信息命令
命令 描述
~

~                              顯示線程信息

~* [Command]           所有線程

~. [Command]            當前線程

~# [Command]           引發當前事件或異常的線程

~Number [Command]  顯示指定序號的線程

~~[TID] [Command]   顯示指定線程ID的線程

~Ns                          切換到線程 N

~* k  顯示所有線程的調用棧

~2 f   凍結2號線程

~# f  凍結引發異常的線程

~3 u  解除對3號線程的凍結

~2 k  顯示2號線程的調用棧

~e

~* e CommandString            在所有線程上執行命令

~. e CommandString             在當前線程上執行命令

~# e CommandString            在引發異常的線程上執行命令

~Number e CommandString   在指定序號的線程上執行命令

~2e r; k; kd  相當于 ~2r; ~2k; ~2kd

~*e !gle       顯示所有線程的最后一個錯誤信息

~f

~Thread f    凍結線程

~u

~Thread u   解除凍結線程

~n

~Thread n   掛起線程,增加線程掛起數量

~m

~Thread m  恢復線程,減少線程掛起數量

!teb

顯示線程環境信息

!tls 

!tls -1          -1 為顯示當前線程所有的 slot 信息

!tls SlotIdx   顯示指定的 slot 信息

!tls [-1 | SlotIdx] TebAddr

.ttime

顯示線程時間信息

!runaway

[Flags: 0 | 1 | 2] 顯示每個線程消耗的時間,用于快速的查找 CPU 時間消耗最多的線程

0 用戶態時間

1 內核態時間

2 自線程創建起的時間間隔

!gle

!gle         顯示當前線程的最后錯誤

!gle -all    顯示所有線程的最后錯誤

!error

!error ErrValue      解析錯誤信息

!error ErrValue 1   將錯誤值作為 NTSTATUS 代碼

堆棧信息命令
命令 描述
k

k [n] [f] [L] [#Frames]  顯示調用棧信息

kn      調用棧包含幀號

kf       臨近幀的距離

kL       忽略源代碼

kb ...  最開始的 3 參數

kp ...  所有的參數,包括參數類型、名稱和值

kP ...  所有的參數

kv ...  FPO信息

kb 5   顯示最開始的 5 個幀

kd

kd [WordCnt]  顯示原始棧數據和可能的符號信息

kM

使用 DML 格式顯示堆棧信息

.kframes

設置棧長度,默認是20(0x14)

.frame

.frame            顯示當前幀

.frame #         指定幀號

.frame /r [#]   顯示寄存器信息

.frame 2         顯示幀號 2 的信息

.frame /r 0d    顯示 0 幀中寄存器信息

!uniqstack

!uniqstack                   顯示所有線程的棧信息

!uniqstack [b|v|p] [n]   b=前3個參數;v=FPO信息;p=所有參數;n=幀號

!uniqstack -?               顯示幫助

!findstack

!findstack Symbol              找到包含符號或模塊的棧

!findstack Symbol [0|1|2]   0=僅顯示線程ID;1=線程ID和幀;2=全部的線程棧;

!findstack -?                      顯示幫助

!findstack clr 2                   顯示包含 clr 的所有棧的信息

擴展幫助命令
命令 描述

!Ext.help

常規擴展命令幫助

!Exts.help

 

!Uext.help

用戶態模式擴展命令幫助

!Ntsdexts.help

用戶態擴展命令幫助(OS相關)

!logexts.help

日志相關擴展

!clr10\sos.help

調試托管代碼

!wow64exts.help

wow64調試器擴展

!Wdfkd.help

內核態驅動框架擴展

!Gdikdx.help

圖形驅動擴展

!NAME.help

顯示任何 NAME 名稱的擴展命令的幫助
日志擴展命令
命令 描述

!logexts.help

 顯示所有日志擴展命令

!loge

!loge [dir]  打開日志功能,可選配置輸出目錄

!logi

初始化日志功能

!logd

關閉日志功能

!logo

!logo                    列出日志配置信息

!logo [e|d] [d|t|v]  打開或關閉日志,d=調試器,t=文本文件,v=詳細信息

!logc

!logc                        列出所有日志類型

!logc p #                  列出 # 中的日志類型

!logc [e|d] *              打開或關閉所有日志類型

!logc [e|d] # [#] [#]  打開或關閉日志類型 #

!logb

!logb p  打印緩沖區信息至調試器

!logb f   刷新緩沖區內容之日志文件

!logm

!logm                          顯示模塊的包含或屏蔽列表

!logm [i|x] [DLL] [DLL]  指定模塊的包含或屏蔽列表

參考資料

本文為 Dennis Gao 原創技術文章,發表于博客園博客,未經作者本人允許禁止任何形式的轉載。

系列博文

  1. 《WinDbg 命令三部曲:(一)WinDbg 命令手冊》
  2. 《WinDbg 命令三部曲:(二)WinDbg SOS 擴展命令手冊》
  3. 《WinDbg 命令三部曲:(三)WinDbg SOSEX 擴展命令手冊》

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()