Windebug雙機調試環境搭建
開始進行內核編程/驅動編程的調試工作是非常煩人的,由於程序運行與內核層不受操作系統的管控,所以容易引起主機藍屏和崩潰是常有的事。這也就使得內核程序的調試成了一大問題,而在資源有限的時候,利用虛擬機進行調試是一個很好的選擇,這樣一來即使是虛擬機因為調試問題而發生藍屏或崩潰的問題也不至於殃及主機。
今天在搭建環境過程中還是遇到了不少問題,雖然關於這方面的文章已經很多了,但是有一些細節還是會不小心被忽略,而這往往導致最后環境搭建的失敗。在這里就相當於做個總結吧,記錄整個環境搭建的過程
一、准備工作
a、虛擬機
我自己用的是VMware Workstation 10,當然也可以使用其它的虛擬機,不過這個也挺好用的,可以在網上搜一下就能找到下載資源。
b、Windbg
這是一款不錯的內核調試軟件。注意一定要下完整,剛開始就是因為下了一個不完整的資源導致一直配不成功。關於Windbg的獲取可以登錄:
http://msdn.microsoft.com/en-us/windows/hardware/hh852365,網站中詳細的說明了Windbg的獲取方式,在WinDDK的安裝路徑7600.16385.1\Debuggers下就是Windbg,所以在安裝WinDDK的時候應該選擇完整安裝,還有大量的例子。。。
c、操作系統
我這里用的是windows XP SP3
二、環境搭建
雙機:一台調試機(主機)+一台被調試機(虛擬機)+一個串口線。 注:Windebug安裝在調試機上
2.1虛擬機的配置
串口配置:
1、打開VM中對應的虛擬機設置界面,如下圖
2、注意查看是否已有串口存在,如果有需要移除,否在會導致windebug與虛擬機連接不上!!!這里尤為注意打印會占用串口,如下圖所示。
在此需要將打印機移除,否在將導致windebug無法與虛擬機連接!!!!!
如果已有串口存在的時候,依舊添加新串口的話就會出現如下圖的情況:
新添加的串口的設備名稱為“串行端口2”而不是“串行端口”,是由於串行端口1已經被打印機設備占用,根據這個情況也可以判斷是否已有串口存在,自習檢查並確定沒有串行端口存在以后
可繼續下文步驟。
3、添加串口
如下圖在【虛擬機設置】窗口的下方選擇【添加】按鈕
4、進入【添加硬件向導】,硬件類型選擇
在【硬件類型】框中選擇【串行端口】然后點擊窗口右下角的【下一步】按鈕
5、串行端口類型選擇
在【串行端口】復選框中選擇【輸出到命名管道】,然后點擊對話框右下角的【下一步】按鈕
6、指定插槽
配置如下圖所示,其中命名管道的com_1為管道名稱,可以作改動,但是在用windebug進行連接的時候也要注意名字的一致!!
我這里保留默認名。兩台機器,一台為【該端是服務器】保留默認設置,最后一個下拉框選擇【另一端是應用程序】。最后注意吧【啟動時連接】的復選框選上。
然后點擊【完成】按鈕即可完成配置。
7、完成串行端口添加
如下圖所示,可以看到新添加的串行端口,並且占用的串行端口1,名字不再是“串行端口2”
打開虛擬機進行配置:
打開虛擬機中Windows的系統盤,在文件夾選項中設置為“顯示所有文件”,“不隱藏系統保護的文件”,然后可以在系統盤下看到一個boot.ini文件。
如果在C盤下找不到boot.int文件,可通過一下方式解決:
打開電腦屬性——高級——啟動與故障恢復——在系統啟動欄目下選擇手動編輯,就打開boot.ini了。
一般boot.int的內容如下:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
可以將最后一行復制一行並且粘貼占[operating systems]下,然后修改一些參數即可,修改后內容如下:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="XP Debug" /fastdetect /debug /debugport=com1 /buadrate=115200 multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
其中timeout為等待時間30s,而[operating systems]下的兩行中,第一行為啟動調試運行選項,第二行為正常啟動選項
注:
因為在boot.ini中設置的debug輸出端口為com1,所以在虛擬操作系統的設備管理器中設置COM1端口的波特率為115200。其他保持默認設置。至此虛擬機設置完畢,重啟時即可使用windebug進行連接。
2.2Windebug配置
下面是調試機上的windebug的啟動參數,使之連接一個管道,並把這個管道當做一個串口來處理。
windbg.exe -b -k com:por\\.\pipe\com_1,baud=115200,pipe
或
windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,resets=0
上面的命令可以在控制台(cmd窗口)轉到windebug所在目錄下后執行。為了以后使用方便,最好建立一個windbg.exe的快捷方式,創建方法如下:
右鍵單擊windbg.exe選擇【創建快捷方式】——》右鍵單擊創建好的快捷方式圖標並選擇【屬性】——》在屬性對話框的【目標】一欄加上空格后添加
-b -k com:por\\.\pipe\com_1,baud=115200,pipe
或者
windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,resets=0
——》點擊保存即可。
打開虛擬機,啟動到調試模式之后哦,馬上在命令行中輸入命令或者用快捷方式打開WinDbg,就可以開始調試了。windbg.exe會顯示連接上的信息。如下組圖:
圖中顯示的等待時間為之前在boot.ini中設置的timeout值,而【請選擇要啟動的操作系統:】菜單下的選項則為設置的[operating systems]下的菜單項。這里選擇第一項安回車進入或者等時間到了以后自動進入。
系統以調試模式啟動以后,windbg就會選擇連接信息,如上圖
2.3 設置Windows內核符號表
打開Windbg,選擇菜單項的“File”->“Symbol File Path”,然后填下:
srv*c:\Symbols*http://msdl.microsoft.com/download/symbols
如下圖如果我們勾選了Reload,那么相當於輸入了.reload命令,這時開始下載:
點擊【OK】開始下載。。。如下圖
以上方法是設置是WinDbg自動用HTTP協議從微軟的網站上下載所需的符號表。下載完后可以在C:\Symbols目錄中查看,這個路徑也可以指定為其它路徑。
注:
(1)以上只有需要的時候才會下載;對於已經下載的以后就直接用這個文件夾里面的符號表了。
(2)有時候下載不一定總是成功。如果發現符號表並沒有下載下來,請多試幾次。(虛擬機不用關閉,多試幾次)
(3)實際調試驅動時還要加上自己驅動對應的符號表。(驅動對應的符號表可以在編譯路徑下的objchk_wxp_x86\i386目錄下找到)
(4)當然也可以把系統的Symbols從微軟的網站上一次性打包下載下來再解壓到C盤的Symbols文件夾。從http://msdn.microsoft.com/en-us/windows/hardware/gg463028可以下載到系統對應的符號表(注意是和虛擬機對應的系統版本)
(5)之后關閉Windbg,會提示是否保存,點擊是,保存。