前言
當我們沒有兩台物理機時,又想做雙機內核調試怎么辦?當然是裝虛擬機啦!本文總結了使用 VMware15.5 + win10 + virtualkd + windbg 搭建雙機內核調試環境。
安裝環境
-
VMware版本:15.5 pro。可以到 VMware 官網下載地址 下載最新版本。 -
我的物理主機系統:
win10 1909。其它版本的windows也可以,VMware15.5最低支持win7系統。 -
虛擬機系統鏡像:
win10 1809 x64。其它版本的系統也可以。我們可以在 msdn i tell you 上面找到各個版本的windows官方鏡像。除了系統鏡像,還包括其它很多工具的官方鏡像,比如vs,office等。
-
windbg版本:10.0.18362.1,其它版本的也可以。windbg包含在windows sdk中。可以到微軟官網 SDK 下載地址 下載。如果只需要windbg,推薦下載.exe形式的安裝包。在安裝的時候,可以只勾選Debugging Tools for Windows。
安裝 VMware & 安裝 win10
下載 VMware 到本地后,直接雙擊即可安裝,一路點擊 下一步 即可。需要注意以下兩點:
- 盡量下載最新版本的
VMware,早期版本的VMware在win10 1909上可能有兼容性問題。 - 安裝完成后,最好重啟系統!
安裝好 VMware 后,就可以安裝系統鏡像了。通過 文件(F) -> 新建虛擬機(N) 即可開始 新建虛擬機向導。一般我們通過 安裝程序光盤映像文件(iso)(M) 的形式選擇下載好的系統鏡像安裝,然后一路 下一步(N) 即可。
安裝完成后,可以啟動了。但是可能遇到一些問題,我做了簡單的總結。
可能遇到的問題
- 提示
Intel VT-x被禁用。

根據提示,在 BIOS 里開啟 Intel VT-x。
重啟進入BIOS ,打開 Intel Virutal Technology,按 F10 保存退出。
- 提示
VMware Workstation與Device/Credential Guard不兼容。
強烈建議先檢查下 Hyper-V 是否開啟,如果開啟了,請先關閉 Hyper-V。
如果關閉 Hyper-V 后還是出現上圖的提示。請參考 禁用 Device/Credential Guard 的微軟官方文檔。
點擊工具下載鏈接,下載相應的腳本文件到本地。如果我們的系統不是英文系統,按照提示改變腳本里的
*$OSArch = $(gwmi win32_operatingsystem).OSArchitecture 為 $OSArch = $((gwmi win32_operatingsystem).OSArchitecture).tolower()
然后以管理員權限執行 DG_Readiness_Tool_v3.6.ps1 -Disable -AutoReboot 即可。
-Disable 表示關閉。
-AutoReboot 表示自動重啟系統,根據自己的需要指定。
重啟后,會有提示是否要真的禁用此特性。按 Windows鍵或者 F3 鍵禁用,按Esc 跳過。
順利安裝完系統過后,我們就可以開始進行雙機內核調試了。
通過虛擬串口方式連接
如果我們希望通過虛擬串口的形式連接,我們在系統設置前,一定要注意: VMware 中的打印機會占用默認的 串口 1。如果不移除打印機,我們新建的串口會是 串口 2(這樣,我們在被調試系統中設置的時候,需要設定debugport 的值為 2)。
當然,我們可以移除打印機,然后新建串口,這樣新建的串口就是默認的 串口 1 了。
我以保留打印機,使用 COM2 為例,錄制了一份屏幕錄像。這里對整個操作過程做一個簡要描述:
-
新建串口,因為打印機占用了
串口 1,所以我們新建的串口是串口 2。 -
設置
pipe參數,我設置的是\\.\pipe\bcn_com,其他參數默認即可。 -
啟動虛擬機系統,設置調試參數,命令如下:
bcdedit /debug on bcdedit /dbgsettings serial debugport:1 baudrate:115200 -
以管理員權限運行
windbg,通過界面連接。
-
重啟虛擬機系統,發現連接不上。因為我們新建的串口是
串口 2,而我們在虛擬機系統里設置的是串口 1。 -
重啟虛擬機系統,設置調試參數,命令如下:
bcdedit /debug on bcdedit /dbgsettings serial debugport:2 baudrate:115200 -
重啟虛擬機系統,這次成功連接上了。
-
最后,還演示了
windbg通過命令行直接連接。命令行如下:windbg.exe -k com:pipe,port=\\.\pipe\bcn_com,reconnect

通過 VirtualKD
經常做雙機內核調試的小伙伴兒一定對 VirtualKD 不陌生。可以大大提高雙機內核調試的速度,可謂神器。
幾年前,用 VirtualKD 搭建雙機內核調試環境很簡單。沒想到這次居然各種連接不上。通過 google 搜索關鍵字 VMware15 VirtualKD,在 VirtualKD github issues 和 看雪論壇『求助問答』的帖子 看到已經有小伙伴兒遇到這個問題了。應該是 VirtualKD3.0 與 VMware15.5 不兼容。真是個壞消息,不過也有好消息 —— 已經有大佬解決了這個問題,github 上對應的倉庫是 VirtualKD-Redux。
在查找解決方案的過程,發現有人遇到另外一個問題。在虛擬機里執行 bcdedit /debug on 失敗,提示值被保護,如下圖:
可以在 虛擬機設置 的 高級 選項里,禁用 安全引導。
VirutalKD-Redux 的使用方法和 VirutalKD 一樣,簡要步驟如下:
- 在調試主機端運行
vmmon64.exe,點擊Debugger Path...選擇調試器路徑。 - 把
target64拷貝到虛擬機中(如果是32位系統,請拷貝target32)。 - 在虛擬機中執行
target64目錄下的vminstall.exe安裝VirtualKD-Redux。 - 重啟虛擬機系統,選擇新建立的
Entry,並且按F8選擇禁用強制簽名。 - 如果順利,調試器會自動彈出並連接到被調試系統(因為
Start debugger automatically默認是勾選狀態)。 - 如果調試器沒自動彈出,或者我們意外的關閉了調試器,我們可以通過點擊
Run Debugger按鈕,手動啟動調試器。
整個過程,非常簡單。具體過程錄屏如下:
windbg 符號路徑設置
當我們執行一些命令的時候(比如,!thread),需要符號文件的幫助。我們可以通過 _NT_SYMBOL_PATH 環境變量設置符號路徑。如果還沒有設置,可以在 windbg 中執行 .symfix path/to/symbol_cache 自動設置微軟符號服務器為上游符號服務器。當需要符號時,windbg 會先到 path/to/symbol_cache 中查找符號,如果找不到,會繼續到微軟符號服務器上查找,如果在微軟符號服務器上找到了,會緩存到 path/to/symbol_cache,然后從 path/to/symbol_cache 加載符號。
溫馨提示:
.symfix命令會刪除windbg中現有的符號路徑設置。- 目前,好像需要ke xue上網才能成功連接微軟符號服務器。
總結
-
使用
VMware前,最好禁用Hyper-V,禁用Security Boot,開啟Intel VT-x。 -
一定要注意,
VMware默認帶的打印機會占用串口 1,如果不刪除打印機就新建串口的話,新建的串口是串口 2。 -
VirtualKD3.0還不支持VMware15.5,我們可以使用VirtualKD-Redux。 -
執行
.symfix path/to/symbol_cache使用微軟符號服務器。
參考資料
VirtualKD official install tutorial



