使用WinDbg進(jìn)行Windows內(nèi)核調(diào)試通常需要兩臺計(jì)算機(jī),一臺是Debuggee,一臺作為Debugger,又成為Host。使用Virtual PC可以在同一臺電腦上進(jìn)行內(nèi)核調(diào)試,對于某些調(diào)試任務(wù)來說還是非常有用的。
下面以Virtual PC 2004為例,介紹一下利用Virtual PC進(jìn)行Windows內(nèi)核調(diào)試的詳細(xì)過程。
1,下載并安裝Virtual PC 2004,從略。
2,啟動Virutal PC Console(控制臺),創(chuàng)建一臺新的虛擬PC,安裝向?qū)У奶崾九渲糜脖P、內(nèi)存等參數(shù)。
3,在剛才創(chuàng)建的虛擬PC上安裝操作系統(tǒng),這個操作系統(tǒng)應(yīng)該是你要調(diào)試的Windows版本。比如你想調(diào)試你的驅(qū)動程序在Windows Server 2003上出現(xiàn)的問題,那么就安裝Windows Server 2003。我們以Windows 2000為例。
4,配置虛擬PC的串行口,在Virtual PC的控制臺中選擇Windows 2000,然后點(diǎn)擊Settings按鈕彈出設(shè)置對話框,然后在左側(cè)的列表中(如下圖)選擇COM1。

右側(cè)選擇Named Pipe選項(xiàng),即使用命名管道來模擬串行口,然后輸入管道的完整名稱:\\.\pipe\com_1,com_1可以為其它名稱,但是前面的部分應(yīng)該保持不變。
5,啟動虛擬PC中的Windows 2000,然后進(jìn)入命令行窗口,執(zhí)行如下命令以便在啟動菜單中增加調(diào)試選項(xiàng):
c:
cd\
attrib -r -h
edit boot.ini
然后將其最末一行復(fù)制,并加入調(diào)試選項(xiàng),成為為如下狀態(tài):

6,在虛擬PC中選擇重新啟動Windows 2000,當(dāng)出現(xiàn)啟動菜單時,按方向鍵使其停止自動計(jì)時,等待在這里。

7,在主機(jī)(debugger)上準(zhǔn)備啟動WinDbg,考慮每次輸入命令行參數(shù)太麻煩,所以建議建立一個如下內(nèi)容的批處理文件,并將其放到與WinDbg.exe同位置的目錄中。
windbg -k com:pipe,port=\\.\pipe\com_1
8,運(yùn)行批處理文件,使其也進(jìn)入等待狀態(tài):

9,切換到虛擬PC窗口,選擇帶有“Debug Enabled”的一項(xiàng)然后回車啟動。
10,切換到WinDbg窗口并觀察,如果一切順利,那么會有如下類似信息輸出:
Connected to Windows 2000 2195 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
Symbol search path is: SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows 2000 Kernel Version 2195 UP Free x86 compatible
Kernel base = 0x80400000 PsLoadedModuleList = 0x8046a4c0
System Uptime: not available
11,見到如上信息就說明WinDbg已經(jīng)與虛擬PC中運(yùn)行的Windows 2000成功建立調(diào)試對話了。如果想感受一下將Windows控制于股掌之中的快感,那么就按下Ctrl+Break,隨著按鍵發(fā)出,Windows 2000會被立刻定住。WinDbg中會顯示如下信息:
*******************************************************************************
* *
* You are seeing this message because you pressed either *
* CTRL+C (if you run kd.exe) or, *
* CTRL+BREAK (if you run WinDBG), *
* on your debugger machine's keyboard. *
* *
* THIS IS NOT A BUG OR A SYSTEM CRASH *
* *
* If you did not intend to break into the debugger, press the "g" key, then *
* press the "Enter" key now. This message might immediately reappear. If it *
* does, press "g" and "Enter" again. *
* *
*******************************************************************************
此時WinDbg的命令提示符區(qū)會顯示一段時間*BUSY*(或者其它無效狀態(tài),老本本的WinDbg),這是因?yàn)閃inDbg在尋找調(diào)試符號。

在你非常熟悉以上過程之后,其實(shí)可以不完全拘泥以上過程的, 比如可以先讓W(xué)indows 2000以調(diào)試選項(xiàng)運(yùn)行起來,然后再運(yùn)行WinDbg。
最后再介紹幾種常見的失敗情況:
1)啟動WinDbg,但是出現(xiàn)下圖所示的錯誤信息,Win32 error 2,即指定的文件名找不到,這是因?yàn)樘摂MPC還沒有啟動,還沒有創(chuàng)建這個管道\\.\pipe\com_1, 系統(tǒng)中不存在這樣的文件。應(yīng)該運(yùn)行虛擬PC,哪怕只到啟動選項(xiàng)也可以,便不會再有這個錯誤了。
