各位大牛以及和我一样还是菜鸟的朋友们,大家好,今天在调试驱动程序时,由于要做双机调试,所以顺便再论坛发给以后需要的朋友,相对网上其他教程我的这个
算是比较详细了,因为我是看了网上很多相关文章,他们多多少少都还是存在一些问题,可能导致我们无法正常调试。
我通过结合自己的实践,做个教程叫大家,Windebug双机调试是任何做驱动的程序员都必须会的。。。。。。。。。。
废话不多说,直接来教程:
(1)1.配置VMware(windows XP) >>>>>为VMware工作站添加串口
添加完毕,然后在设置时把I/O模式勾了,如果添加完毕没有出来如图右边的选项(虚拟机禁用了什么什么的)我们可以在编辑--->首选项---->设备
2.修改boot.ini文件完成配置
如果找不到就设置下查看文件加属性显示受保护的文件。
直接打开C:\boot.ini(如果看不见的同学需要在文件夹选项中打开显示隐藏文件),然后在文件末尾另起一行添加如下启动参数:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=COM1 /baudrate=115200
3.配置宿主机windbg
在开始里面找到我们安装的Windebug图标,创建桌面快捷方式,鼠标右键,选择属性。
在目标后面 空格添加 -b -k com:pipe,port=\\.\pipe\com_1,baud=115200,pipe(记住打空格)。
5.下载调试所需符号
打开windbg
现在已经是完事具备,只欠符号.接下来点击 File – Symbol File Path…,填入 SRV*D:\symbol*http://msdl.microsoft.com/download/symbols 后,选中reload.单击OK(如果是平时调试您自己的程序,或者存有本地 Symbol,这里也可填写本地符号文件路径).
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#重要说明
(1) windbg命令分为标准命令,元命令和扩展命令。
标准命令提供最基本的调试功能,不区分大小写。如:bp g dt dv k等
元命令提供标准命令没有提供的功能,也内建在调试引擎中,以.开头。如.sympath .reload等
扩展命令用于扩展某一方面的调试功能,实现在动态加载的扩展模块中,以!开头。如!analyze等
(2) 进入调试状态时,直接回车可重复执行上一条命令;按上下方向键可以浏览和选择以前输入过的命令
(3) 神奇的Tab键,进行命令补全;ESC清除当前命令输入框中的文本
(4) 使用;作为分隔符,可以在同一行输入多条命令
(5) 上图红色框中的“0:000”。【0为当前调试会话的进程号;000为调试会话的线程号】
(6) 当命令提示符显示*BUSY*时,即使命令输入框可以输入命令,但输入的命令不会立即被执行,要等windbg空闲时才能执行。
可使用Ctrl + Break来终止一个长时间未完成的命令
(7) 一次可以执行多条命令,命令间用分号;分隔 【如:bp main;bp `view.cpp:120`】,一次打2个断点
(8) 为了保证windbg流畅运行,在调试时,尽量不要开启Watch、Locals、Registers、Call Stack、Processes and Threads窗口,直接用command来获取信息
#启动调试
windbg -I // 将windbg设置成默认调试器
windbg "notepad.exe" arguments // 使用windbg启动调试notepad.exe
windbg -p 4200 // 将windbg附加到一个正在运行的pid为4200的进程上
windbg -pn "notepad.exe" // 将windbg附加到一个正在运行的名为notepad.exe的进程上
windbg –z "c:\mydumpfile.dmp" // 调试mydumpfile.dmp文件
.opendump "c:\mydumpfile.dmp" // 调试mydumpfile.dmp文件
.attach 0n4220 // 4220为十进制pid,使用该命令附加调试时,必须先存在一个调试会话
.detach // 分离调试
.restart // 重启并调试
.kill // 强制结束当前调试
q // 结束当前调试会话,回到基础工作空间,并结束调试进程
qd // 结束当前调试会话,回到基础工作空间,但不结束调试进程
#获取帮助
? // 打印出所有标准命令
.help // 打印出所有元命令
.hh // 打开windbg的chm帮助文件
.hh bp // 打开windbg的chm帮助文件bp命令介绍页
command /? // 打印命令command具体参数用法
#注释符
* // 注释整行
$$ // 注释(遇到分号结束)
#配置调试环境
注:如果被调试的模块(无论移动到本机的何处)是用本机代码编译产生的,都不需要进行符号和源代码的路径设置
.sympath // 查看当前符号查找路径
.sympath c:\symbols // 将符号查找路径设为:c:\symbols
.sympath+ c:\symbols // 将c:\symbols添加到符号查找路径集合中
.symfix // 将符号查找路径设为:SRV*WinDbg安装目录\Sym*http://msdl.microsoft.com/download/symbols
.symfix f:\symbols // 将符号查找路径设为:SRV*f:\symbols*http://msdl.microsoft.com/download/symbols
.symfix+ f:\symbols // 将SRV*f:\symbols*http://msdl.microsoft.com/download/symbols添加到符号查找路径集合中
.srcpath // 查看当前源文件查找路径
.srcpath f:\src // 将源文件查找路径设为:f:\src 注:必须勾选上菜单“Debug”-“Source Mode”;另外pdb须与exe、dll等执行模块匹配上
.srcpath+ f:\src // 将f:\src添加到源文件查找路径集合中
.exepath // 查看可执行文件查找路径
.exepath f:\bin // 将可执行文件查找路径设为:f:\bin
.exepath+ f:\bin // 将f:\bin添加到可执行文件查找路径集合中
#系统信息
vertarget // os信息
!cpuid // cpu信息
#wow64模式 【x64版windbg调试win32程序】
.effmach