WinDbg是微軟開發(fā)的免費源碼級調試工具。Windbg可以用于Kernel模式調試和用戶模式調試,還可以調試Dump文件。在DotNet方面WinDbg是調試分析SSCLI的最佳工具,同時可以和SOS擴展一起調試分析.net程序。最近一段時間項目需要學習了一下,有感于WinDbg功能的強大。
WinDbg資料整理:
使用WinDbg調試程序
WINDOWS調試工具很強大,但是學習使用它們并不容易。特別對于驅動開發(fā)者使用的WinDbg和KD這兩個內核調試器(CDB和NTSD是用戶態(tài)調試器)。本教程的目標是給予一個已經有其他調試工具使用經驗的開發(fā)者足夠信息,使其能通過參考WINDOWS調試工具的幫助文件進行內核調試。本文將假定開發(fā)者熟悉一般WINDOWS操作系統(tǒng)和進程的建立過程。
本文的重點是集成內核模式和用戶態(tài)模式的圖形化調試器WinDbg。KD在腳本和自動化調試中更有用,并且在資深程序員中擁有一定地位,但是本教程將集中討論WinDbg,只會偶爾提到KD。
本文討論的是Windows NT 4.0,Windows 2000或以后的版本,而且目標電腦的處理器基于X86架構。對于64位平臺,將不會特別提及。
總之,本教程由簡單介紹調試器的安裝開始,大體分成2部分,基礎知識和選擇技術;A知識包括基本調試命令和常用調試命令。選擇技術是其他命令和在很多情況下都有用的調查方法。后者并不是調查象deadlocks, memory corruption或者resource leaks的唯一方法。第一次閱讀本教程,你可能會跳過選擇技術。你可以停止閱讀本教程而轉向微軟調試器討論組,也可以通過調試器的反饋e-mai解決更多的問題。
通往WinDbg的捷徑(一)
通往WinDbg的捷徑(二)
用WinDbg探索CLR世界1 - 安裝與環(huán)境配置
在托管代碼中設置斷點(WINDBG)
用WinDbg動態(tài)脫Reflector
使用WINDBG和SOS調試死鎖
使用Windbg和SoS擴展調試分析
幾個常用的 WinDbg 命令
Windbg核心調試之dump分析
從Ollydbg說起-----WinDbg用戶態(tài)調試教程
WinDbg使用幫助:基本調試技術:
本節(jié)包括:
使用 !analyze 擴展
設定條件斷點
將虛擬地址轉換成物理地址
追蹤處理器獨占者
從轉儲文件中提取信息
確定對象的ACL
顯示一個臨界區(qū)
調試應用故障
SOS 調試擴展 (SOS.dll)
WinDbg驅動調試攻略:
安裝完虛擬機后,請在VMware主菜單“VM”中選擇“Install VM Tools…”,完成系統(tǒng)驅動文件的安裝。
安裝完這兩個軟件后,請在VMware中安裝跟你的電腦版本相同的操作系統(tǒng)。例如:你的電腦安裝的是WindowsXP Professional,那么最好在Vmware中安裝相同版本。至少是相同的系統(tǒng),Windows XPßà Windows XP、Windows 2000ßà Windows 2000。這樣會在驅動調試過程中避免不必要的麻煩。筆者使用的操作系統(tǒng)為Windows XP Professional。
我們將使用電腦的COM1口最為調試口。
(1) 編輯虛擬機中C盤根目錄下的boot.ini文件。
C:\>attrib -s -h -r boot.ini
C:\>notepad boot.ini
在boot.ini文件中添加以下代碼:
multi(0) disk(0) rdisk(0) partition(1) \WINDOWS="Microsoft Windows XP Professional-Debug" /fastdetect /debugport=COM1 /baudrate=115200
(2) 打開vmware中winxp的設備管理器,選擇端口(com1),如下圖。
(3) 雙擊這個"com1",在彈出的對話框中,設置如下圖。
(4) 關閉vmware下的操作系統(tǒng)。配制虛擬機的硬件,VM->Settings->Add->加一個Serial Port,選擇"Output to named pipe",然后下一步,第一框里保持默認的 "\\.\pipe\com_1"
第二框里選"This end is the server."
第三框里選"The other end is an application."
選中 "Connect at power on"選中 "Yield CPU on poll"。保存退出。
(5) 回到我們的真實系統(tǒng)(主機)中,重復(2)、(3)兩步。
(6) 設置WinDbg的快捷方式,及其運行參數(shù):
在快捷方式的屬性中,將目標(Target)改為:
"C:\Program Files\Debugging Tools for Windows\windbg.exe" -b -k com:pipe,port=\\.\pipe\com_1,resets=0
命令參數(shù)的意義:
-b:一旦主機目標機之間建立起連接,立刻中斷目標機
-k:內核調試
Com:設置連接目標機的通信端口(此處為命名管道)和波特率(此處為115200)
-y:設置符號文件路徑
(7)設置WinDbg參數(shù)
現(xiàn)在我們假設你的驅動代碼放在D:\mydriver目錄中;系統(tǒng)級Symbol文件存放在C:\WINDOWS\Symbols目錄中,這些Symbol文件是從微軟的網站上http://msdl.microsoft.com/download/symbols下載而來,這個網址是不可以用IE直接打開的,WinDbgà Fileà Symbol File Path...界面中選擇Reload,WinDbg會自動幫你下載;驅動生成的Symbol文件存放在D:\mydriver\objchk_wxp_x86\i386目錄中。
a) 設置驅動Symbol路徑,WinDbgà Fileà Symbol File Path...為
SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; D:\mydriver\objchk_wxp_x86\i386
b) 設置驅動源文件路徑,WinDbgà Fileà Source File Path…為D:\mydriver
c) 為了保險起見,我們同時設置系統(tǒng)變量。
My Computer à Properties à Advanced Tab à Enviroment Variables à Add.
_NT_DEBUG_BAUD_RATE=115200
_NT_SYMBOL_PATH=SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols
_NT_ALT_SYMBOL_PATH = D:\mydriver\objchk_wxp_x86\i386
_NT_SOURCE_PATH = D:\mydriver
(8)啟動VMware,將主機目錄C:\WINDOWS\Symbols下的拷貝到虛擬機的相同位置。同時請把驅動編譯后生成在D:\mydriver\objchk_wxp_x86\i386目錄下的*.pdb、*.sys、*.map、*.exp、*.lib文件一并拷貝到兩個系統(tǒng)的C:\WINDOWS\Symbols目錄中。
(9)重新啟動VMware,并選擇如圖所示。這個時候先不敲回車鍵。
(10) 在主機中運行之前設置好的WinDbg快捷方式。直到在WinDbg命令窗口中出現(xiàn)“Waiting to reconnect...”,此時打開VMware,敲回車鍵進入虛擬機。到這里所有的設置工作就全部完成了。
2.驅動安裝及調試
這里其大家注意,由于我們目前用的是虛擬機,所以安裝驅動程序的時候一定要把VMware設置到全屏狀態(tài)。
(1) 編輯你要調試的源代碼,在你需要調試的代碼中添加硬斷點。如果不添加硬斷點,將沒有辦法進入所調試的程序中。具體方法如下:
在你需要調試的程序中加入以下代碼:
extern "C" {
#include <wdm.h>
//或者是#include <winddk.h>
}//放在文件開頭
DbgBreakPoint();//放在需要調試的地方
重新編譯驅動程序,記住一定要更新把重新生成的*.pdb、*.sys、*.map、*.exp、*.lib文件一并拷貝到兩個系統(tǒng)的C:\WINDOWS\Symbols目錄中。
(2)打開VMware,Ctrl+Alt+Enter進入虛擬機全屏模式。插入需要調試設備的硬件,筆者調試的目標設備為USB。當USB插入主機后,直接由VMware識別到這個USB設備,指定驅動位置,系統(tǒng)將會在你設置硬斷點的地方停下來。這個時候你就可以回到WinDbg,進行單步調試了。你還可以在程序中添加軟斷點,“F9”或者“bp MyApp!MyFunction”。
3.兩臺電腦調試說明
兩臺電腦調試跟借助VMware調試有所不同,不同之處有以下幾個方面。
(1)需要自己制作一條Null Modem Cable. 請參考以下電路。將兩臺電腦連接起來。
管腳信息說明:
9-Pin NULL Modem Cabling
3 2 Transmit Data
2 3 Receive Data
7 8 Request to Send
8 7 Clear to Send
6,1 4 Data Set Ready and Carrier Detect
5 5 Signal Ground
4 6,1 Data Terminal Ready
25-Pin NULL Modem Cabling
2 3 Transmit Data
3 2 Receive Data
4 5 Request to Send
5 4 Clear to Send
6 20 Data Set Ready and Carrier Detect
7 7 Signal Ground
20 6 Data Terminal Ready
(2)WinDbg快捷方式參數(shù)設置
"C:\Program Files\Debugging Tools for Windows\windbg.exe" -b -k com:port=\\.\ com1,resets=0