WinDbg是微軟發(fā)布的一款免費而十分強大的源碼級(source-level)調(diào)試工具,既然是微軟自己發(fā)布的調(diào)試工具,那它對微軟產(chǎn)品的調(diào)試當(dāng)然是十分的強大!
MS網(wǎng)站上的windbg調(diào)試工具是要附帶SDK環(huán)境的。而且已經(jīng)很多不能下載了,我的開發(fā)環(huán)境是VC6,有沒有單一的Windbg提供下載的,windbg單獨版!
WinDbg可以用于Kernel模式調(diào)試和用戶模式調(diào)試,還可以調(diào)試Dump文件,能夠通過dmp文件輕松的定位到問題根源,可用于分析藍(lán)屏、程序崩潰(IE崩潰)原因,是我們?nèi)粘9ぷ髦斜夭豢缮俚囊粋有力工具,學(xué)會使用它,將有效提升我們的問題解決效率和準(zhǔn)確率。
配置WinDbg:
運行WinDbg->菜單->File->Symbol File Path->按照下面的方法設(shè)置_NT_SYMBOL_PATH變量:
在彈出的框中輸入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照這樣設(shè)置,WinDbg將先從本地文件夾C:\MyCodesSymbols中查找Symbol,如果找不到,則自動從MS的Symbol Server上下載Symbols)。另一種做法是從這個Symbol下載地址中http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下載相應(yīng)操作系統(tǒng)所需要的完整的Symbol安裝包,并進行安裝,例如我將其安裝在D:\WINDOWS\Symbols,在該框中輸入“D:\WINDOWS\Symbols”。(這里要注意下載的Symbols的版本一定要正確,在我的Win2003+Sp1上,我曾經(jīng)以為安裝Win2003+Sp2的Symbols可能會!咙c,但結(jié)果證明我錯了,用WinDbg打開可執(zhí)行文件時,提示“PDB symbol for mscorwks.dll not loaded;Defaulted to export symbols for ntdll.dll”的錯誤,我有重新裝上Win2003+Sp1的Symbols, 現(xiàn)在一切運行正常^_^)
啟動后的界面:
到這里,可能會發(fā)現(xiàn)沒有其它窗口。但其實,只要你點擊對應(yīng)的窗口按鈕(上圖紅色方框圈著的區(qū)域),工作區(qū)就會出現(xiàn)相應(yīng)的窗口。
WinDbg有好幾個窗口,功能跟OllyDbg的差不多。窗口的名稱與用途如下:
名稱 熱鍵 用途
Command Atl+1 輸入命令、顯示命令結(jié)果和調(diào)試信息輸出
Watch Alt+2 觀察指令全局變量、局部變量和寄存器的信息
Locals Alt+3 自動顯示當(dāng)前函數(shù)的所有局部變量
Registers Atl+4 觀察和修改寄存器的值
Memory Alt+5 觀察和修改內(nèi)存數(shù)據(jù)
Call Stack Alt+6 棧中記錄的函數(shù)調(diào)用序列
Disassembly Alt+7 反匯編
Scratch Pad Alt+8 白板,可以用來做調(diào)試筆記等
Processes and Threads Alt+9 顯示所有調(diào)試目標(biāo)的列表,包括進程和線程等
Command Browser Alt+N 執(zhí)行和瀏覽命令
在彈出需要的窗口后,就可以對窗口進行排列。通過鼠標(biāo)拖曳窗口或結(jié)合右擊窗口標(biāo)題選擇Dock(停靠)和Always floating(保持浮動),可以把窗口擺放成最適合我們工作的位置。
不知道是不是我自己的問題,本來想著把窗口排列成跟OllyDbg的界面類似,可怎么弄也達不到目的,最后也就選擇了兩個我最常用的窗口(Disassembly和Command),然后上下擺放。就像:
各位如果有擺放窗口的訣竅,麻煩也告之一下….
符號、源碼路徑設(shè)置:
剛才也說過,WinDbg是一款很強大的源碼調(diào)試工具。如果我們有程序的源碼的話,一般可以生成它的符號文件。而在用WinDbg進行調(diào)試時,因為WinDbg本身不會自動識別符號文件,所以需要我們設(shè)置。
可以通過打開菜單 File Symbol File Path 和 File Source File Path,打開對應(yīng)的對話框進行設(shè)置。
可以直接在Source path編輯框輸入目錄,也可以通過按鈕Browse進行選擇。多個目錄之間用分號隔開。
到這里,可能有人有疑問。符號文件是什么?為什么我們以前用OllyDbg時不用設(shè)置符號文件?
其實我接觸到這里的時候也十分的迷惑,甚至當(dāng)時以為WinDbg只能調(diào)試有源碼的文件。但后來,通過試驗,逐步清楚了。
按我理解,符號就是用來標(biāo)識程序的某個函數(shù)、變量或標(biāo)記的東西。例如,通過載入有源代碼和程序符號的目標(biāo)文件,就可以輕松的使用 bp WinMain(我用來測試的程序的主函數(shù))和bp 函數(shù)名(程序里的某個函數(shù))。
那如果沒有源代碼怎么辦?那只好使用微軟的公共符號庫。所謂公共符號庫,可以理解成WinDbg對某些微軟的系統(tǒng)函數(shù)(例如MessageBoxA)的識別,就像OllyDbg能夠識別出MessageBoxA一樣。雖然WinDbg能夠識別出這些系統(tǒng)函數(shù),但卻顯示的不明顯(到后面會接觸到)。
要設(shè)置公共符號文件,只需在設(shè)置符號文件的編輯框里輸入路徑即可。一般的輸入形式為:
SRV*g:\symbols*http://msdl.microsoft.com/download/symbols
意思大概就是從http://msdl.microsoft.com/download/symbols的地址里下載符號到g:\symbols(自己設(shè)置用來保存符號的目錄)。然后設(shè)置完可以使用 .reload 命令WinDbg重新加載新的符號文件。具體的用法可以參考WinDbg的幫助文檔。
使用WinDbg:
WinDbg提供了圖形界面和命令行兩種運行方式。這里介紹使用圖形界面的WinDbg來調(diào)試應(yīng)用程序:
File->OpenExecutable->可以選擇一個可執(zhí)行文件進行調(diào)試;
File->Attache to a Process->可以選擇一個運行中的進程,并對其進行調(diào)試;
至此,我們就可以在上圖中用紅色方框標(biāo)記的文本框中輸入各個功能指令了(有關(guān)指令的幫助文檔,可以參考:Help->Contents->Debugging Tools for Windows->Debuggers->Debugger Reference,該目錄下列集了所有指令機器功能說明!)。