windbg雙機調試的連接設置和常見問題(真機和VMware虛擬機間的連接)

一些廢話

在做內核開發的時候,windbg給我們提供了方便,但是windbg要求內核調試是雙機調試,所以我們首先面對的是調試機和被調試機的連接問題。

相信大部分開發人員都是用實體機開發好代碼,放到虛擬機中運行,並在實體機中運行windbg對虛擬機內核進行調試吧,真巧~~~我也是~~~~~~~~~


實驗環境:

真機:64位win7

虛擬機:32位XP


基本原理:

要做到雙機連接調試,簡單說就是通過一個串口(虛擬機中就是虛擬串口)把主調試機上的windbg應用程序和運行着【調試狀態】的被調試系統(如調試狀態的XP)連接起來,這樣就能通過windbg對被調試機的系統進行像調試普通應用程序一樣的控制和玩弄~~當然也可以看到調試信息


正確連接步驟:

1,找到被調試系統中要修改的文件

打開虛擬機,進入系統盤(有人系統盤不是C盤嗎?額。。),在菜單欄中選工具——文件夾選項,彈出對話框,點查看,然後:顯示所有文件和文件夾,並把隱藏受保護的操作系統文件點掉。確認後回到系統盤界面中,可以看到文件boot.ini(此時的boot.ini是隻讀的),在boot.ini的“屬性”中把只讀點掉。


2.修改boot.ini,讓虛擬機打開並準備好調試端口:

在boot.ini最後面加一行(這裏大家留心debugport和baudrate這兩個參數的值):

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com_1 baudrate=115200

保存好文件,關閉虛擬機。


3.VMware給虛擬機創建虛擬串口

【虛擬機關閉後】在虛擬機名字上點右鍵,選擇虛擬機設置(settings..),彈出虛擬機設置對話框。

點擊對話框左半邊的添加(Add..),然後選擇串口(Serial Port)——next——output to named pipe(第三個選項)——輸入名字如:\\.\pipe\com_1,另外第三個選項選擇“The other end is an application”——finish


4.準備好真機上windbg的連接工作

回到真機,安裝windbg,並運行程序,點擊文件(File)——內核調試(Kernel Debug),在彈出的對話框中

 

Port一欄按照自己在Vmware中設置的名字\\.\pipe\xxx,寫要一致,然後把右側的Pipe,Reconnect都勾上,看一下BaudRate(波特率)的值,是不是和當時設置虛擬機中bind.ini的baudrate一致。然後確定,就可以看到windbg這邊處於準備連接狀態。

正式連接:

現在打開虛擬機,運行的過程中會讓你選是否運行調試版本的系統,選擇調試版本的。然後虛擬機windows正式開始運行,windbg這邊也應該有反應了~~~這叫啥,這叫連接上了!!!


無法連接的可能原因:

1.windbg版本問題:

當我們做設置windbg這一步驟並開始讓windbg等待連接的時候,可以看到windbg窗口顯示了它的版本信息,大家看清楚哦~

 

比如這裏第一行最後有個信息:X86。這個要和虛擬機的版本一直,我之前弱爆了,我剛開始用的windbg這是顯示的amd64。。。64啊有木有,這尼瑪是調試64位系統的有木有。。。所以確定自己虛擬機裝的是多少位的系統,然後調試機這邊使用對應的windbg。


2.串口問題

上面的配置過程的第二步,請大家注意的那兩個參數,debugport是虛擬機使用的連接端口,我上面寫的是com_1,這裏大家要確認端口1是不是可用,確認方法兩個:1.打開超級終端,選擇com1,看看能不能打開,能打開說明能用,否則換其他的試試。2.回到vmware界面,看看虛擬機的設置(settings)中,硬件(Hardware)的設備(Device)那一欄,找到自己當初創建的虛擬串口,看看這一列是串口幾(我的是Serial Port2)。所以我的bind文件中要寫com_2。(和我一樣的新手們記住啊,這裏配置打開的端口號要以VMware給出的爲準)。

【上面確定端口用方法2,如果發現還是連接不上,就用方法1試試這個端口能不能用(我覺得VMware不傻,一般它給開的都能用吧。。),如果使用的其他虛擬平臺的童鞋相信也可以找到對應的端口信息】


3.虛擬端口名稱一致

也就是在創建虛擬串口的時候,name裏輸入的名字如\\.\pipe\xxx,這裏要和調試機中windbg請求的端口名稱一致


4.bind文件參數格式(坑爹原因)

在不同的虛擬機,或一款虛擬平臺軟件的不同版本中,對端口參數的描述格式可能是不同的

有些是com1,這時候,虛擬機中bind.ini文件的debugport就要賦值com1.

而有些格式是com_1,我的vmware就識別這種格式,所以要賦值com_x

坑爹啊,我就被坑在這裏了,剛開始找資料,參數給了comx形式的怎麼都連不上,歲月在燃燒啊有木有,很浪費光陰啊有木有,這尼瑪是在坑爹啊,有木有。


最後祝大家連接愉快~


技術相關更多文章猛擊:哇啦天堂論壇技術區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章