各位好:
最近想借助windbg调试一下我的驱动,看了网上很多关于双机调试的资料,多数都是虚拟机作为target进行调试。这个我也尝试了一下,确实可以。
但我的这个驱动需要主板上的硬件,所以我就只能两个实体PC进行调试了,一个作为host,一个作为target.按照网上的配置,主机成功与目标机建立了连接,
且在目标机启动界面结束以前,从主机端都可以中断(ctrl+break)目标机,而在目标机启动界面结束后主机就再也无法中断目标机。
不知道各位有没有遇到过这种情况 ,附件为目标机最后卡住时主机windbg的情况。
估计是目标机中的某个驱动有反调试行为,有意无意“破坏”了调试设施。卸载目标系统中不必要的软件,或者换个目标试验一下...
谢了。
换了好几个版本的系统了,都不行,有一个版本XP SP3的安全模式下可以进入到界面,但应用程序此时却不能起来。
这个很怪了,有没有人遇到过呀。
用的什么通信方式,1394还是串口?
按Ctrl + Alt + D热键,激活调试信息,显示的信息粘贴几行过来...
用的通讯方式是串口,调试信息如下:
WinDBG调试输出说明主机端收不到预期的(类型7)数据包。简单说就是主机端和调试引擎之间的通信断了。这可能和数据线有关,但综合所有信息,还是怀疑某个软件(多半是驱动程序)破坏了串口通信,这也可以解释为什么安全模式时可以,因为安全模式时那个软件可能没有得到运行机会。
那么如何定位是哪个驱动或者软件破坏了串口通讯呢,我安装的直接就是xp sp3原安装包,没有其它非安装包中的驱动了。
而且这个安装包安装到虚拟机中,连接调试器,系统是可以正常进入的,只不过外围硬件有很多不同。
谢谢了。
如果是干净的系统,那么是有些奇怪的。绝对如此么?
无论如何,可以尝试这样调查:
在能成功断下来时,选Debug > Event Filters调出调试事件配置对话框,选Load module事件,右侧按Command按钮,输入如下命令:
.echo *****module load****;lm;gc
设置好后,让恢复系统运行,然后每当有驱动加载时,应该就有信息输出,等没有信息输出时,再追查加载哪个驱动后就没有显示了(通信断了)...
按你所说的方法试了一下,最后一次出现的模块和倒数第二次出现的作了一下对比。多了下面这一行:
bec0f000 bf08c000 igxpdx32 (deferred) ,然后我把系统目录下的这个文件改了一下名称,再作一次启动,
结果还是进入系统的时候挂住,对比最后两次模块发现多了下面这行:
bff70000 bff72480 vga_bff70000 (deferred)
我在虚拟机中没有找到igxpdx32.dll文件
把Ctrl+Alt+D的信息也激活,看出现timetout前是否有可疑的事件发生.
请一个经常做内核调试的同事或者朋友到现场看一下,也许可以更快解决问题。
我身边没有做这个的,我也只是想研究一下。
我把host和target对调一下,是没问题的。
问题可能在我的target板子,而且安全模式下既使连上了也会超时的,但是却可以中断系统。
可以尝试监视KdDisableDebuggerWithLock函数,看是否有“人”通过这个DDI禁止内核调试,参考:
http://advdbg.org/blogs/advdbg_system/articles/5718.aspx