I have a dump collected for my executable App.exe
: App.DMP
Unfortunately, we didn't save the .pdb
for this specific build, but since we have build number we could rebuild the same version and reconstruct the .pdb
This didn't help and I couldn't load the symbols with Visual Studio
.
So I tried to open the dump with WinDbg
and force loading the should-match symbols, following these 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\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
Why isn't the force loading working? what is it with D:
drive? I don't have such drive.. is it related to this GUID (CEE75F0AAD5348458938777BBD4165B01) not matching my dump? shouldn't the force cover this?
The symbols and image file all have compile-time checksums, so rebuilding the same build does not produce a "compatible" PDB to debug the system.
Using the force with the new re-built image may produce a similar enough build for diagnosis of the crash to work. But optimizations such as Whole-program-optimization, incremental linking and profile-guided-optimizations may produce marginal differences in the symbols.
Use .symopt
SYMOPT_LOAD_ANYTHING and put the newly built pdb and binary at the start of the search path.
The location checked by windgb is a) the link output directory, b) paths on the symbol path.
This means that when you build a binary and debug it on the same machine, it usually finds the correct value. The D: is your build server's build directory.