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形式的怎么都连不上,岁月在燃烧啊有木有,很浪费光阴啊有木有,这尼玛是在坑爹啊,有木有。


最后祝大家连接愉快~


技术相关更多文章猛击:哇啦天堂论坛技术区

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