【转帖】驱动调试攻略(WinDbg)

 驱动调试是一个系统级调试方式,所以调试工具用WinDbg是最佳选择。驱动调试一般情况下,需要两台电脑进行。一台作为主机进行驱动调试,另一台作为目标机进行驱动安装。当然如果没有多余的电脑,我们可以安装VMware模拟系统调试(虚拟机)。只是对电脑的配置要求比较高。本文介绍使用WinDbg及WMware进行调试的具体设置及方法。这些资料在网络很难找到,笔者也是吸取了他人很多宝贵意见才完成的,供大家学习讨论。

1.       安装和设置WinDbg,WMware

首先,请到微软官方网站

http://www.microsoft.com/whdc/devtools/debugging/default.mspx,下载最新版本的WinDbg工具,建议使用6.0以上版本的WinDbg做为调试工具。WMware也可以在网站上找到,当然使用高版本比较好。 安装过程比较简单,就不在此多做介绍。唯一要注意的是,安装完虚拟机后,请在VMware主菜单“VM”中选择“Install VM Tools…”,完成系统驱动文件的安装。

       安装完这两个软件后,请在VMware中安装跟你的电脑版本相同的操作系统。例如:你的电脑安装的是WindowsXP Professional,那么最好在Vmware中安装相同版本。至少是相同的系统,Windows XPßà Windows XP、Windows 2000ßà Windows 2000。这样会在驱动调试过程中避免不必要的麻烦。笔者使用的操作系统为Windows XP Professional。

       我们将使用电脑的COM1口最为调试口。

(1) 编辑虚拟机中C盘根目录下的boot.ini文件。

C:/>attrib -s -h -r boot.ini

C:/>notepad boot.ini

在boot.ini文件中添加以下代码:

multi(0) disk(0) rdisk(0) partition(1) /WINDOWS="Microsoft Windows XP Professional-Debug" /fastdetect /debugport=COM1 /baudrate=115200

(2) 打开vmware中winxp的设备管理器,选择端口(com1),如下图。

 (3) 双击这个"com1",在弹出的对话框中,设置如下图。

 (4) 关闭vmware下的操作系统。配制虚拟机的硬件,VM->Settings->Add->加一个Serial Port,选择"Output to named pipe",然后下一步,第一框里保持默认的 "//./pipe/com_1"

第二框里选"This end is the server."

第三框里选"The other end is an application."

选中 "Connect at power on"选中 "Yield CPU on poll"。保存退出。

(5) 回到我们的真实系统(主机)中,重复(2)、(3)两步。

(6) 设置WinDbg的快捷方式,及其运行参数:

 在快捷方式的属性中,将目标(Target)改为:

"C:/Program Files/Debugging Tools for Windows/windbg.exe" -b -k com:pipe,port=//./pipe/com_1,resets=0

命令参数的意义:

-b:一旦主机目标机之间建立起连接,立刻中断目标机

-k:内核调试

Com:设置连接目标机的通信端口(此处为命名管道)和波特率(此处为115200)

-y:设置符号文件路径

(7)设置WinDbg参数

 现在我们假设你的驱动代码放在D:/mydriver目录中;系统级Symbol文件存放在C:/WINDOWS/Symbols目录中,这些Symbol文件是从微软的网站上http://msdl.microsoft.com/download/symbols下载而来,这个网址是不可以用IE直接打开的,WinDbgà Fileà Symbol File Path...界面中选择Reload,WinDbg会自动帮你下载;驱动生成的Symbol文件存放在D:/mydriver/objchk_wxp_x86/i386目录中。

a) 设置驱动Symbol路径,WinDbgà Fileà Symbol File Path...为

SRV*C:/WINDOWS/Symbols*http://msdl.microsoft.com/download/symbols; D:/mydriver/objchk_wxp_x86/i386

b) 设置驱动源文件路径,WinDbgà Fileà Source File Path…为D:/mydriver

c) 为了保险起见,我们同时设置系统变量。

My Computer à Properties à Advanced Tab à Enviroment Variables à Add.

_NT_DEBUG_BAUD_RATE=115200

_NT_SYMBOL_PATH=SRV*C:/WINDOWS/Symbols*http://msdl.microsoft.com/download/symbols

_NT_ALT_SYMBOL_PATH = D:/mydriver/objchk_wxp_x86/i386

_NT_SOURCE_PATH = D:/mydriver

(8)启动VMware,将主机目录C:/WINDOWS/Symbols下的拷贝到虚拟机的相同位置。同时请把驱动编译后生成在D:/mydriver/objchk_wxp_x86/i386目录下的*.pdb、*.sys、*.map、*.exp、*.lib文件一并拷贝到两个系统的C:/WINDOWS/Symbols目录中。

(9)重新启动VMware,并选择如图所示。这个时候先不敲回车键。

(10) 在主机中运行之前设置好的WinDbg快捷方式。直到在WinDbg命令窗口中出现“Waiting to reconnect...”,此时打开VMware,敲回车键进入虚拟机。到这里所有的设置工作就全部完成了。

2.驱动安装及调试

   这里其大家注意,由于我们目前用的是虚拟机,所以安装驱动程序的时候一定要把VMware设置到全屏状态。

(1) 编辑你要调试的源代码,在你需要调试的代码中添加硬断点。如果不添加硬断点,将没有办法进入所调试的程序中。具体方法如下:

在你需要调试的程序中加入以下代码:

extern "C" {

#include <wdm.h>

//或者是#include <winddk.h>

}//放在文件开头

DbgBreakPoint();//放在需要调试的地方

重新编译驱动程序,记住一定要更新把重新生成的*.pdb、*.sys、*.map、*.exp、*.lib文件一并拷贝到两个系统的C:/WINDOWS/Symbols目录中。

(2)       打开VMware,Ctrl+Alt+Enter进入虚拟机全屏模式。插入需要调试设备的硬件,笔者调试的目标设备为USB。当USB插入主机后,直接由VMware识别到这个USB设备,指定驱动位置,系统将会在你设置硬断点的地方停下来。这个时候你就可以回到WinDbg,进行单步调试了。你还可以在程序中添加软断点,“F9”或者“bp MyApp!MyFunction”。

3.两台电脑调试说明

   两台电脑调试跟借助VMware调试有所不同,不同之处有以下几个方面。

(1)       需要自己制作一条Null Modem Cable. 请参考以下电路。将两台电脑连接起来。

管脚信息说明: 

9-Pin NULL Modem Cabling

3 2 Transmit Data

2 3 Receive Data

7 8 Request to Send

8 7 Clear to Send

6,1 4 Data Set Ready and Carrier Detect

5 5 Signal Ground

4 6,1 Data Terminal Ready

 

25-Pin NULL Modem Cabling

2 3 Transmit Data

3 2 Receive Data

4 5 Request to Send

5 4 Clear to Send

6 20 Data Set Ready and Carrier Detect

7 7 Signal Ground

20 6 Data Terminal Ready 

 

(2)WinDbg快捷方式参数设置

"C:/Program Files/Debugging Tools for Windows/windbg.exe" -b -k com:port=//./ com1,resets=0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值