使用WinDbg進(jìn)行Windows內(nèi)核調(diào)試通常需要兩臺(tái)計(jì)算機(jī),一臺(tái)是Debuggee,一臺(tái)作為Debugger,又成為Host。使用Virtual PC可以在同一臺(tái)電腦上進(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,啟動(dòng)Virutal PC Console(控制臺(tái)),創(chuàng)建一臺(tái)新的虛擬PC,安裝向?qū)У奶崾九渲糜脖P、內(nèi)存等參數(shù)。
3,在剛才創(chuàng)建的虛擬PC上安裝操作系統(tǒng),這個(gè)操作系統(tǒng)應(yīng)該是你要調(diào)試的Windows版本。比如你想調(diào)試你的驅(qū)動(dòng)程序在Windows Server 2003上出現(xiàn)的問題,那么就安裝Windows Server 2003。我們以Windows 2000為例。
4,配置虛擬PC的串行口,在Virtual PC的控制臺(tái)中選擇Windows 2000,然后點(diǎn)擊Settings按鈕彈出設(shè)置對話框,然后在左側(cè)的列表中(如下圖)選擇COM1。

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

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

7,在主機(jī)(debugger)上準(zhǔn)備啟動(dòng)WinDbg,考慮每次輸入命令行參數(shù)太麻煩,所以建議建立一個(gè)如下內(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)然后回車啟動(dòng)。
10,切換到WinDbg窗口并觀察,如果一切順利,那么會(huì)有如下類似信息輸出:
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會(huì)被立刻定住。WinDbg中會(huì)顯示如下信息:
*******************************************************************************
* *
* 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. *
* *
*******************************************************************************
此時(shí)WinDbg的命令提示符區(qū)會(huì)顯示一段時(shí)間*BUSY*(或者其它無效狀態(tài),老本本的WinDbg),這是因?yàn)閃inDbg在尋找調(diào)試符號(hào)。

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