之前没有接触过驱动调试。这里上手就要解决一个因为某个自定义驱动导致的系统登陆后蓝屏问题,记录下来。
问题:
从客户那边弄来的一个虚拟机,已知是加了我们的驱动之后才会导致蓝屏。
解决过程:
使用windbg直接双机调试
开机登陆后会直接蓝屏,错误码是0x00000050。想要进入安全模式去移除驱动也进不去,会卡在某个驱动加载过程中。首要的就是进入系统去排查是哪个驱动有问题。还好是虚拟机,有如下方式可更改操作系统中内容。,改完之后要在虚拟机射中的使用工具中断开相应映射。
注意:有些与具体设备相关的驱动,无法直接通过更改驱动名称来去掉驱动,因为注册表里填充了该驱动名,当系统启动时找不到驱动也会蓝屏。
通过windbg调试win7内核驱动,这里有篇比较好的博文有比较系统的介绍。http://www.cnblogs.com/mvperic/archive/2010/07/25/1784790.html
问题来了,按照别人教的在windbg里设置好符号路径和源代码路径,连是连上了,可以似乎总是到一半就断掉了。完全不知道怎么回事啊。。。
于是请教了一下会的同事,还是没找到原因,然后用另一个相同的系统,发现是可以挂上的,所以配置方法没问题,没有找到解决方法,那么用windbg直接调试驱动这个方法暂时搁置了。
使用windbg分析dump文件
打开新的windbg窗口,设置好微软符号服务器srv*C:symbolcache*http://msdl.microsoft.com/download/symbols;
以及自己的驱动pdb目录、自己驱动的源码路径,以及Image路径(即sys文件路径)。然后拖入dump文件,界面效果如下,这时候手动敲入命令!Analyze -v,出现如下提示,OK,已经在进行分析了,稍等片刻,还会有更详细的信息,最终是这样的效果,按alt+6打开堆栈窗口,
如果这里面有自己的驱动函数的话,双击就会跳到源码中出问题的地方了。很像VS调试,我这里是后面截的图,所以没有我的驱动了。