windbg实现双机调试平台搭建
前提是,有两台真机,目标机是WinXp,调试机是win7,它们通过串口连接,波特率115200.
在目标机上修改配置设置文件boot.ini
注意在修改boot.ini文件之前,要去掉它的只读属性.
然后用记事本打开文件后,添加一行选项,内容为
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Microsoft Windows XP Professional - debug” /fastdetect /debugport=com1 /baudrate=115200
然后再把timeout=0修为timeout=10,作用是启动系统时后有时间作出选择.
实际文件内容为
[boot loader] timeout=10 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 multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - debug" /fastdetect /debugport=com1 /baudrate=115200
调试机端
1. 安装windbg软件
2.为windbg创建一个桌面快捷方式,打开属性,修改目标为”C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe” -b -k com:port=com1,baud=115200
3.打开windbg的快捷方式,此时调试器处于等待状态.等待串口收到正确的信息.
进入调试
注意在开始调试之前,建议两台真机先用串口调试助手测试一下串口通信是否正常.
打开目标机,进入系统选项时,选调试模式就可以了.
此时调试机端,windbg从串口接收到了正确的信号后,发出了中断指令,使目标机中断.执行g命令后,目标继续启动.
一般的调试过程
要调试驱动程序,调试机端需提前准好两样东西.一是驱动程序的符号文件即pdb文件,二是源码.
在windbg中设置好符号文件路径和源码文件路径.
然后一个一个打开需要下断点的源码,在代码中下断点,也可以通过命令下断点,比如bp driver!DriverEntry
windbg命令很多,调试技术很深,需要不断学习和使用才能掌握.
安装驱动程序时,遇到失败,提示这个INF中的服务安装段落无效
打开c:\windows\setupapi.log这个日志文件
找到这样一行,
mportant;">错误 0xe0000217:这个INF中的服务安装段落无效.
在它的上一行发现这样一行,
添加服务: 服务 “SvcDesc” 的二进制文件 “C:\WINDOWS\system32\DRIVERS\driver.sys”
不存在.
这说明inf文件中CopyFiles节,复制文件由于某种原因没有成功.于手动把sys文件复到c:\windows\system32\drivers,然后再安装就成功了.
驱动程序中代码的毛病,设备管理器中有感叹号,无法启动.
1.驱动程序首先编译是成功的,没有问题.
2.安装成功了,也没有问题.
所以需要调试代码.
发现DriverEntry例程进入正常.
AddDevice例程进入正常.
PnpIrp例程进入正常.但得到的MinorFunction总是IRP_MN_REMOVE_DEVICE,所以启动不起来.
然后在AddDevice例程中发现可疑点,在创建符号链接时,返回码不成功.
ntStatus = IoCreateSymbolicLink (&UserDeviceLinkUnicode,
&KernelDeviceNameUnicode);
原来发现定义符号链接的名称需要以L”\dosDevices\”开头,而我的代码写成了L”\dosDevice\,少了个s,所以出错了.
修正后,设备启动正常了.
本文链接:https://www.kinber.cn/post/4724.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: