WinDbg Preview not loading compressed .pd_ symbol files

0

WinDbg Preview

My symbol path is:

     SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols

The symbol folder

     c:\Symbols\HelloWorld64.pdb\408F6A6B3154428DA5DB17FDD17ABAEE1\

has these two files

    HelloWorld64.pd_
    refs.ptr

To create the above compressed .pd_, I used the /compress option:

    SymStore.exe add /compress /f "C:\Development\HelloWorld\Bin\HelloWorld\x64\HelloWorld64.pdb" /s C:\Symbols /t HelloWorld64-Release /v 2.47.0.1 /o

    SYMSTORE MESSAGE: 0 alternate indexers registered
    SYMSTORE MESSAGE: LastId.txt reported id 131
    SYMSTORE MESSAGE: Final id is 0000000131
    SYMSTORE MESSAGE: Copying 
    C:\Development\HelloWorld\Bin\HelloWorld\x64\HelloWorld64.pdb to C:\Symbols\HelloWorld64.pdb\408F6A6B3154428DA5DB17FDD17ABAEE1\HelloWorld64.pd_ [Force: T, Compress: T]

    SYMSTORE: Number of files stored = 1
    SYMSTORE: Number of errors = 0
    SYMSTORE: Number of files ignored = 0

However, when loading the DMP file, WinDbg is unable to find .pd_ but looks for .pdb instead:

    DBGENG:  C:\Development\HelloWorld\Bin\HelloWorld\x64\HelloWorld64.exe - Mapped image memory
    SYMSRV:  BYINDEX: 0x12
     c:\symbols*http://msdl.microsoft.com/download/symbols
     HelloWorld64.pdb
     408F6A6B3154428DA5DB17FDD17ABAEE1
     SYMSRV:  UNC: c:\symbols\HelloWorld64.pdb\408F6A6B3154428DA5DB17FDD17ABAEE1\HelloWorld64.pdb - file not found
     SYMSRV:  RESULT: 0x00000000
     DBGHELP: HelloWorld64.pdb - file not found
     DBGHELP: HelloWorld64 - no symbols loaded

Any ideas? Thanks!

debugging
windbg
asked on Stack Overflow Apr 6, 2020 by vengy • edited Apr 7, 2020 by vengy

1 Answer

3

symsrv can work with uncompressed pdb only if you have compressed pdbs you need a cache where it can be decompressed the walkthrough below done on Microsoft (R) Windows Debugger Version 10.0.19528.1000 AMD64

if you are using symstore to store a compressed pdb then you need a local cache to decompress it before symsrv can locate it

0:000> .reload /f
Reloading current modules
.SYMSRV:  BYINDEX: 0x2
         f:\symbols*https://msdl.microsoft.com/download/symbols
         deto.pdb
         3C481DA1FE5E450F947D744F14D014272
SYMSRV:  UNC: f:\symbols\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pdb - file not found
SYMSRV:  RESULT: 0x00000000
DBGHELP: F:\src\deto\deto.pdb - file not found
DBGHELP: deto - no symbols loaded

symbol not found above as only deto.pd_ exists there stored using symstore.exe

F:\src\deto>dir /s /b f:\symbols\deto.pdb\3C481DA1FE5E450F947D744F14D014272\
f:\symbols\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pd_
f:\symbols\deto.pdb\3C481DA1FE5E450F947D744F14D014272\refs.ptr

temporarily changed sympath to add a local cache

0:000> .sympath srv*f:\test*f:\symbols
DBGHELP: Symbol Search Path: srv*f:\test*f:\symbols

doing a .reload symbols are now accessible in f:\test (it will also copy ntdll.pdb and others from f:\symbols to f:\test before accessing them

compress option is mainly used for symbol server operations (where you have petabytes of symbols for gigabytes of versions) if you compile them simply store then uncompressed and get rid of headaches

0:000> .reload /f
Reloading current modules
.SYMSRV:  BYINDEX: 0x8
         f:\test*f:\symbols
         deto.pdb
         3C481DA1FE5E450F947D744F14D014272
SYMSRV:  UNC: f:\test\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pdb - path not found
SYMSRV:  UNC: f:\test\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pd_ - path not found
SYMSRV:  UNC: f:\test\deto.pdb\3C481DA1FE5E450F947D744F14D014272\file.ptr - path not found
SYMSRV:  UNC: f:\symbols\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pdb - file not found
SYMSRV:  deto.pd_ from f:\symbols: uncompressed
SYMSRV:  PATH: f:\test\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pdb
SYMSRV:  RESULT: 0x00000000
DBGHELP: deto - private symbols & lines 
        f:\test\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pdb
answered on Stack Overflow Apr 7, 2020 by blabb

User contributions licensed under CC BY-SA 3.0