使用 .reload 强制 WinDbg 加载 pdb 不起作用

Force WinDbg to load pdb using `.reload` is not working

我为我的可执行文件收集了转储 App.exeApp.DMP

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

这没有帮助,我无法使用 Visual Studio 加载符号。

所以我尝试用 WinDbg 打开转储并强制加载应该匹配的符号,遵循这些 instructions:

0:000> !sym –noisy
0:000> .reload /f /i C:\Tests\dump-e\App.exe
SYMSRV:  BYINDEX: 0x34
         C:\Program Files (x86)\Windows Kits\Debuggers\x86\sym
         App.pdb
         CEE75F0AAD5348458938777BBD4165B01
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pdb - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pd_ - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\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\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pdb - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\Debuggers\x86\sym\App.pdb\CEE75F0AAD5348458938777BBD4165B01\App.pd_ - path not found
SYMSRV:  UNC: C:\Program Files (x86)\Windows Kits\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\_w\s\App\x64\Release\App.pdb' to the cache
DBGHELP: D:\Agt\Def\_w\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) 不匹配我的转储有关?部队不应该覆盖这个吗?

符号和图像文件都有编译时校验和,因此重建相同的构建不会产生 "compatible" PDB 来调试系统。

将力与新的重建图像一起使用可能会产生足够相似的构建来诊断崩溃。但诸如全程序优化、增量 linking 和配置文件引导优化等优化可能会在符号中产生边际差异。

使用.symopt SYMOPT_LOAD_ANYTHING并将新建的pdb和二进制文件放在搜索路径的开头。

windgb检查的位置是 a) link 输出目录, b) 符号路径上的路径。

这意味着当您构建一个二进制文件并在同一台机器上对其进行调试时,它通常会找到正确的值。 D: 是您的构建服务器的构建目录。