使用WinDbg时,应该在哪里放置私有符号文件(pdb?)?
我的情况是:我有一个我想调试的DLL.我有这个DLL的源代码和符号文件.这个DLL由另一个DLL(我没有符号或源代码)调用,而这个DLL又由EXE调用(我也没有符号或源代码).
我的问题是我收到了警告
***警告:无法验证C:\ TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll的校验和
我认为这个警告是我在调用堆栈中获取以下类型的消息的原因:
MYDLL!ACLASS ::机能缺失+ SomeHexAddress
我的文件结构如下所示:
exe:C:\ TheProgram\program.exe
调用dll:C\TheProgram\SomeSubfolder\caller.???
我要调试的DLL:C:\ TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll
注意:我将符号文件路径和源文件路径设置为生成调试DLL的位置,在我的工作区中与exe的不同驱动器上..但我确实复制了pdb + map文件并将其放在我想要的dll上调试..
这么晚才回复很抱歉.
在您的帖子中,您提到您看到以下错误消息.
*** WARNING: Unable to verify checksum for C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll
你还问了一个问题,"我在哪里将我的DLL符号放在符号路径中?"
以下是对第一个问题的回复:
识别不匹配符号的步骤.
!sym吵闹
.reload
x MyDll!*class*
*这会重新加载你的dll,或者你可以输入kb来显示DLL的调用堆栈,它也应该加载它.
!sym quiet
*重置回原来的安静符号加载
你也可以跑
0:001> lmv m myDll *(and examine the Checksum)
注意:如果您有校验和,则Windbg可以将DLL的校验和与PDB的校验和进行匹配.每个开发环境都有不同的方式来生成校验和.
以下是关于PDB放置位置的问题的回答
如果将MyDll.pdb添加到符号存储中,则可以使用以下语法
.sympath SRV*c:\symcache*http://msdl.microsoft.com/download/symbols
正如罗杰上面所说的......
但是,如果您只是在本地使用PDB,则可能需要先将路径放到PDB,然后再转到符号服务器,如下所示
.sympath C:\TheProgram\SomeSubfolder\AnotherSubfolder\;SRV*c:\symcache*http://msdl.microsoft.com/download/symbols
这样,在尝试使用符号服务器缓存之前,Windbg应该在您的SomSubFolder目录中看起来是本地的.
谢谢你,亚伦