强制WinDbg使用`.reload`加载pdb未能奏效。

4

我有一个针对我的可执行文件 App.exe 收集的转储文件:App.DMP

不幸的是,我们没有保存这个特定版本的 .pdb 文件,但由于我们有构建号,我们可以重新构建相同的版本并重建 .pdb 文件。

然而,这并没有帮助我在 Visual Studio 中加载符号。

因此,我尝试使用 WinDbg 打开转储文件,并强制加载应该匹配的符号,按照这些 说明 进行操作:

0:000> !sym –noisy
0:000> .reload /f /i C:\Tests\dump-e\App.exe
SYMSRV:  BYINDEX: 0x34
         C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym
         App.pdb
         CEE75F0AAD5348458938777BBD4165B01
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pdb - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pd_ - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\file.ptr - path not found
SYMSRV:  RESULT: 0x80070003
SYMSRV:  BYINDEX: 0x35
         https://msdl.microsoft.com/download/symbols
         App.pdb
         CEE75F0AAD5348458938777BBD4165B01
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pdb - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pd_ - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\file.ptr - path not found
SYMSRV:  HTTPGET: /download/symbols/App.pdb/CEE75F0AAD5348458938777BBD4165B01/App.pdb
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/App.pdb/CEE75F0AAD5348458938777BBD4165B01/App.pd_

SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/App.pdb/CEE75F0AAD5348458938777BBD4165B01/file.ptr
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  RESULT: 0x80190194
SYMSRV:  BYINDEX: 0x36
         c:\tests\dump
         App.pdb
         CEE75F0AAD5348458938777BBD4165B01
SYMSRV:  UNC: c:\tests\dump\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pdb - path not found
SYMSRV:  UNC: c:\tests\dump\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pd_ - path not found
SYMSRV:  UNC: c:\tests\dump\App.pdb\CEE75F0AAD5348458938777BBD4165B01\file.ptr - path not found
SYMSRV:  RESULT: 0x80070003
DBGHELP: Failed copying the file 'D:\Agt\Def\04\_w\36\s\App\x64\Release\App.pdb' to the cache
DBGHELP: D:\Agt\Def\04\_w\36\s\App\x64\Release\App.pdb - file not found
*** WARNING: Unable to verify checksum for App.exe
*** ERROR: Module load completed but symbols could not be loaded for App.exe
DBGHELP: App - no symbols loaded

为什么力加载不起作用?与 D:驱动器有关吗?我没有这样的驱动器..是否与此 GUID(CEE75F0AAD5348458938777BBD4165B01)不匹配有关,不应该强制覆盖吗?
1个回答

3
符号和图像文件都有编译时的校验和,因此重新构建相同的版本不会生成与调试系统“兼容”的PDB。
使用 force 命令重新构建图像可能会产生足够类似的构建,以便可以对崩溃进行诊断。但是,整个程序优化、增量链接和基于分析的优化等可能会在符号中产生微小的差异。
请使用 ".symopt SYMOPT_LOAD_ANYTHING" 命令,并将新构建的 pdb 和二进制文件放置在搜索路径的开头。
Windbg 检查的位置为: a) 链接输出目录, b) 符号路径上的路径。
这意味着当您在同一台机器上构建二进制文件并进行调试时,通常会找到正确的值。D: 是您的构建服务器的构建目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接