前面介紹了Windbg的UI功能,也基本上能完成基本的調試任務,可是WinDBG主要是以命令方式工做的,這些命令在Command Window裏輸入。WinDBG共支持三類命令:標準命令、元命令和擴展命令。某些命令僅在實時調試中可用,其餘命令僅在調試轉儲文件時可用。某些命令僅在用戶模式調試期間可用,其餘命令僅在內核模式調試期間可用。只有當目標在某些處理器上運行時,某些命令纔可用。sass
1、標準命令安全
標準命令(standard command)用來提供適用於全部調試目標的基本調試功能.標準命令一般是一兩個字符(version除外)或者符號,只有version等少數命令除外。標準命令的第一個字符是不分大小寫的, 第二個字符可能區分大小寫。全部標準命令都是實如今WinDBG內部的, 執行這些命令時不須要加載任何擴展模塊。迄今爲止, WinDBG調試器共實現了130多條標準命令, 分爲60多個系列. 爲了便於記憶, 能夠根據功能將標準命令概括爲以下18個子類。在命令編輯框中輸入一個問號(?), 能夠顯示出主要的標準命令和每一個命令的簡單介紹。服務器
功能 | 命令 | 描述/助記 | 補充信息 |
恢復運行 | g | Go | ~123g, ~#g, ~*g |
跟蹤執行 | t | Trace | |
單步執行 | p | Step | |
追蹤監視 | wt | Trace and Watch Data |
功能 | 命令 | 描述/助記 | 補充信息 |
觀察和修改通用寄存器 | r | Registers | |
讀寫MSR寄存器 | rdmsr和wrmsr | Read MSR and Write MSR | |
設置寄存器顯示掩碼 | rm | Register Mask |
功能 | 命令 | 描述/助記 |
讀IO端口 | ib, iw, id | Input from port (byte, word, double word) |
寫IO端口 | ob, ow, od | Output to port (byte, word, double word) |
功能 | 命令 | 描述/助記 | 補充信息 |
觀察內存 | d系列 | Display Memory | d, da, db, dc, dd, dD, df, dp, dq, du, dw, dW, dyb, dyd |
編輯內存 | e系列 | Enter Values | e, ea, eb, ed, eD, ef, ep, eq, eu, ew, eza, ezu |
搜索內存 | s | Search Memory | sb, sw, sd, sq, sa, su |
功能 | 命令 | 描述/助記 | 補充信息 |
觀察棧 | k系列 | Display Stack Backtrace | k, kb, kc, kd, kp, kP, kv |
功能 | 命令 | 描述/助記 |
軟件斷點 | bp, bu, bm | Set Breakpoint, Set Unresolved Breakpoint, Set Symbol Breakpoint |
硬件斷點 | ba | Break on Access |
管理斷點 | bl | Breakpoint List |
清除,禁止,從新啓用斷點 | bc, bd, be | Breakpoint Clear, Breakpoint Disable, Breakpoint Enable |
功能 | 命令 | 描述/助記 |
顯示控制線程 | ~ | Thread Status |
功能 | 命令 | 描述/助記 |
顯示進程 | | | Process Status |
功能 | 命令 | 描述/助記 |
評估表達式 | ? | Evaluate Expression |
評估C++表達式 | ?? | Evaluate C++ Expression |
功能 | 命令 | 描述/助記 |
彙編 | a | Assemble |
反彙編 | u | Unassemble |
功能 | 命令 | 描述/助記 |
顯示段的選擇子 | dg | Display Selector: shows the segment descriptor for the specified selector |
功能 | 命令 | 描述/助記 | 補充信息 |
運行命令腳本文件 | $ | Run Script File | $<, $><,
<,
|
><, $$>a< |
功能 | 命令 | 描述/助記 | 補充信息 |
異常發生或者某事件發生時debuger的處理方式 | sx系列 | Set Exceptions | sx, sxd, sxe, sxi, sxn, sxr, sx- |
啓用與禁止靜默模式 | sq | Set Quiet Mode | sq |
設置內核debugging選項 | so | Set Kernel Debugging Options | |
設置符號後綴 | ss | Set Symbol Suffix | ss [a|w|n] |
功能 | 命令 | 描述/助記 |
顯示調試器和調試目標版本 | version | Show Debugger Version |
顯示調試目標所在系統的信息 | vertarget | Show Target Computer Version |
功能 | 命令 | 描述/助記 |
檢查符號 | x | Examine Symbols |
功能 | 命令 | 描述/助記 | 補充信息 |
控制和顯示源程序 | ls系列 | List Source Lines | ls, lsa, lsp, lsc, lsf |
功能 | 命令 | 描述/助記 |
加載調試符號 | ld | Load Symbols |
搜索相鄰符號 | ln | List Nearest Symbols |
顯示模塊列表 | lm | List Loaded Modules |
功能 | 命令 | 描述/助記 |
結束調試會話 | q | Quit |
結束遠程調試 | Quit | |
結束調試會話並分離調試目標 | qd | Quit and Detach |
2、元命令數據結構
元命令(Meta-Command)用來提供標準命令沒有提供的經常使用調試功能, 與標準命令同樣, 元命令也是內建在調試器引擎或者WinDBG程序文件中的. 全部元命令都已一個點(.)開始, 因此元命令也被稱爲點命令(Dot Command)。app
按照功能, 能夠把元命令分紅以下幾類.ui
3、擴展命令lua
擴展命令(Extension Command)用於實現針對特定調試目標的調試功能,用於擴展某一方面的調試功能。與標準命令和元命令是內建在WinDBG程序文件中不一樣, 擴展命令式實如今動態加載的擴展模塊(DLL)中的。全部的擴展命令都以!開頭。經過WinDBG的SDK,用戶能夠編寫本身的擴展模塊和擴展命令。執行擴展命令式, 應該以歎號( ! )開始, 歎號在英文中被稱爲bang, 所以擴展名伶也被稱爲Bang Command. 執行擴展命令的完整格式是:![擴展模塊名].<擴展命令名> [參數]。其中, 擴展模塊名能夠省略, 若是省略, WinDBG會自動在已經加載的擴展模塊中搜索指定的命令.spa
WinDBG程序包中包含了經常使用的擴展命令模塊。存放在如下幾個子目錄中:線程
擴展模塊 |
路徑 |
描述 |
ext.dll |
WINEXT |
適用於各類調試目標的經常使用擴展命令 |
kext.dll |
WINEXT |
內核態調試時的經常使用擴展命令 |
uext.dll |
WINEXT |
用戶態調試時的經常使用擴展命令 |
logexts.dll |
WINEXT |
用於監視和記錄API調用(Windows API Logging Extensions) |
sos.dll |
WINEXT |
用於調試託管代碼和.Net程序 |
ks.dll |
WINEXT |
用於調試內核流(Kernel Stream) |
wdfkd.dll |
WINEXT |
調試使用WDF(Windows Driver Foundation)編寫的驅動程序 |
acpikd.dll |
WINXP |
用於ACPI調試,追蹤調用ASL程序的過程,顯示ACPI對象 |
exts.dll |
WINXP |
關於堆(!heap)、進程/線程結構(!teb/!peb)、安全信息(!token、!sid、!acl)和應用程序驗證(!avrf)等的擴展命令 |
kdexts.dll |
WINXP |
包含了大量用於內核調試的擴展命令 |
fltkd.dll |
WINXP |
用於調試文件系統的過濾驅動程序(FsFilter) |
minipkd.dll |
WINXP |
用於調試AIC78xx小端口(miniport)驅動程序 |
ndiskd.dll |
WINXP |
用於調試網絡有關驅動程序 |
ntsdexts.dll |
WINXP |
實現了!handle、!locks、!dp、!dreg(顯示註冊表)等命令 |
rpcexts.dll |
WINXP |
用於RPC調試 |
scsikd.dll |
WINXP |
用於調試SCSI有關的驅動程序 |
traceprt.dll |
WINXP |
用於格式化ETW信息 |
vdmexts.dll |
WINXP |
調試運行在VDM中的DOS程序和WOW程序 |
wow64exts.dll |
WINXP |
調試運行在64位Windows系統中的32位程序 |
wmitrace.dll |
WINXP |
顯示WMI追蹤有關的數據結構、緩衝區和日誌文件 |
由於擴展命令是實如今動態加載的擴展模塊(DLL)中的, 因此執行時須要加載對應的擴展模塊. 當調試目標被激活(debuggee activation)時, WinDBG會根據調試目標的類型和當前的工做空間自動加載命令空間中指定的擴展模塊。用戶也可使用一下方法手動加載擴展模塊。
當使用"!擴展模塊名.擴展命令名"的方式執行擴展命令時, 若是指定的擴展模塊尚未加載, 那麼WinDBG會自動搜索和加載這個模塊.使用.chain命令能夠列出當前加載的全部擴展模塊, 使用.unload和.unloadall命令能夠卸載指定的或者所有擴展模塊. 大多數擴展模塊都支持help命令來顯示這個模塊的基本信息和所包含的所有命令, 例如執行!ext.help能夠顯示ext模塊中的全部擴展命令。