Windbg和符号文件

时间:2013-08-15 19:52:04

标签: windows windbg windows-kernel

我的符号文件有问题。我尝试使用符号文件路径并按如下方式设置路径:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\driver2\objchk_win7_x86\i386

但之后我将其更改为以下内容:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\mydriver\objchk_win7_x86\i386

我在路径中使用mydriver更改了driver2:这是我的驱动程序的.pdb文件所在的路径。问题是.sympath打印正确的路径如下所示:

kd> .sympath
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\mydriver\objchk_win7_x86\i386
Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\users\myuser\desktop\mydriver\objchk_win7_x86\i386

但是仍未找到驱动程序的符号。如果我运行.reload命令,我们可以看到WinDbg在driver2 /目录中寻找.pdb而不是mydriver /目录。

kd> .reload /f mydriver.sys
SYMSRV:  c:\symbols\mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201\mydriver.pdb not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mydriver.pdb/3D655E533B0449A38D7AB0AF637CE9201/mydriver.pdb not found
SYMSRV:  c:\users\myuser\desktop\mydriver\objchk_win7_x86\i386\mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201\mydriver.pdb not found
DBGHELP: c:\users\myuser\desktop\driver2\objchk_win7_x86\i386\mydriver.pdb - file not found
*** ERROR: Module load completed but symbols could not be loaded for mydriver.sys
DBGHELP: mydriver - no symbols loaded

我删除了所有工作区,关闭了WinDbg,重新启动了Windows,但是驱动程序/条目仍然存在:它必须位于默认工作区的缓存中或某处。如何删除WinDbg的所有个人设置,包括那些缓存,所以我可以重新启动WinDbg并使用driver2 / path并使其使用mydriver /。

我也可以通过将mydriver /目录重命名为driver2 /来解决问题,但我不想解决这个问题。我想了解发生了什么,并尽我所能解决它。

3 个答案:

答案 0 :(得分:5)

!sym noisy

会告诉你它为什么不想加载pdb。也许您确实重建了驱动程序,并且pdb guid或pdb age不再匹配。 如果您确定已经构建了相同的源文件,则可以通过

强制加载pdb
.reload /i /f yourdriver.sys

/ i是加载不匹配的pdbs的神奇开关。此开关不会从符号服务器加载任何驱动程序,但它将仅考虑加载驱动程序的本地文件路径。此外,还不考虑符号存储目录(SRV *),因为有许多版本可供选择。但如果您的.sympath直接指向您的pdb,它将被加载。

答案 1 :(得分:0)

最初编译驱动程序&内置在driver2路径? mydriver.sys的位置是什么?

For example assume I have symbol path 'c:\users\rahulsundar\desktop' set and try to load ntdll.dll, then it displays below error,

0:000> .reload ntdll.dll
DBGHELP: c:\users\rahulsundar\desktop\ntdll.pdb - file not found
DBGHELP: c:\users\rahulsundar\desktop\dll\ntdll.pdb - file not found
DBGHELP: c:\users\rahulsundar\desktop\symbols\dll\ntdll.pdb - file not found
DBGHELP: C:\Windows\SYSTEM32\ntdll.pdb - file not found
DBGHELP: ntdll.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
DBGHELP: ntdll - export symbols

Note: Windbg by default searches ntdll.pdb from the same location 'C:\Windows\SYSTEM32'

解决当前问题的一种方法,从日志中明确表示windbg预计目录'c:\ users \ myuser \ desktop \ mydriver \ objchk_win7_x86 \ i386 \ mydriver.pdb \ 3D655E533B0449A38D7AB0AF637CE9201 \ mydriver.pdb'中的pdb文件。

  

所以手动创建目录直到   'mydriver.pdb \ 3D655E533B0449A38D7AB0AF637CE9201'并放置pdb文件   那里。

这只是Windows期望二进制符号的标准方式(binaryfoldername \ hashid \ pdbfile)。

答案 2 :(得分:0)

解决此问题的更好方法 - 打开SIM卡嘈杂并查看路径 在.reload / f my_driver.sys 或者添加.sympath [+] path / to / pdb的新路径并执行相同的操作