在使用windbg分析windows产生的dmp异常转储文件时,常常需要使用到相关应用的pdb文件,否则就只能看到粗略的模块,却不能看到具体的函数执行内容。而微软的官方pdb服务器可以下载到windows相关的pdb文件,对于非官方的程序或驱动,就需要调试者自己去查找并进行设置。本文就如何在使用windbg调试dmp时,如何手动添加非官方的pdb文件进行描述,希望能够帮助遇到该问题的开发者。
笔者最近在分析一个dmp文件,从其stack中可以看到,异常发生时涉及到了一个第三方程序netkvm,查询资料发现这是一个开源的第三方网络驱动,主要用于虚拟机。由于初始时只有微软的相关pdb文件,因此在stack中只能看到netkvm的模块名称,却无法准确判断具体的异常函数。
因为netkvm是开源的驱动文件,因此很容易在社区中找到了所需的sys和pdb文件,但是直接将对应的文件放入到笔者设置的本地symbol路径下,并重新reload并没有效果,那么问题应该是文件路径不对,windbg没有识别相关的文件,因此需要获取windbg加载pdb的详细路径。
使用“.reload /f netkvm.sys”指令尝试加载相关的模块,可以看到windbg异常输出如下:
从上述报错信息可以看到,windbg尝试从“d:\symbols\netkvm.sys\61A8F2E22e000”路径加载netkvm.sys文件,从“d:\symbols\netkvm.pdb\E2CD669467F24AFB9856B5AF63BB298B2”路径加载netkvm.pdb文件。因此解决方法也很简单,创建指定的文件目录,并把所需的文件放入到指定的路径下,并使用“.reload”指令重新加载pdb文件.
后查看stack,可以看到netkvm显示了具体的调用函数信息。