使用WinDbg進行Windows內核調試通常需要兩臺計算機,一臺是Debuggee,一臺作為Debugger,又成為Host。使用Virtual PC可以在同一臺電腦上進行內核調試,對于某些調試任務來說還是非常有用的。
下面以Virtual PC 2004為例,介紹一下利用Virtual PC進行Windows內核調試的詳細過程。
1,下載并安裝Virtual PC 2004,從略。
2,啟動Virutal PC Console(控制臺),創建一臺新的虛擬PC,安裝向導的提示配置硬盤、內存等參數。
3,在剛才創建的虛擬PC上安裝操作系統,這個操作系統應該是你要調試的Windows版本。比如你想調試你的驅動程序在Windows Server 2003上出現的問題,那么就安裝Windows Server 2003。我們以Windows 2000為例。
4,配置虛擬PC的串行口,在Virtual PC的控制臺中選擇Windows 2000,然后點擊Settings按鈕彈出設置對話框,然后在左側的列表中(如下圖)選擇COM1。

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

6,在虛擬PC中選擇重新啟動Windows 2000,當出現啟動菜單時,按方向鍵使其停止自動計時,等待在這里。

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

9,切換到虛擬PC窗口,選擇帶有“Debug Enabled”的一項然后回車啟動。
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已經與虛擬PC中運行的Windows 2000成功建立調試對話了。如果想感受一下將Windows控制于股掌之中的快感,那么就按下Ctrl+Break,隨著按鍵發出,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的命令提示符區會顯示一段時間*BUSY*(或者其它無效狀態,老本本的WinDbg),這是因為WinDbg在尋找調試符號。

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