WinDbg 预览版未加载压缩的 .pd_ 符号文件

WinDbg Preview not loading compressed .pd_ symbol files

WinDbg Preview

我的符号路径是:

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

符号文件夹

     c:\Symbols\HelloWorld64.pdb8F6A6B3154428DA5DB17FDD17ABAEE1\

有这两个文件

    HelloWorld64.pd_
    refs.ptr

为了创建上述压缩的 .pd_,我使用了 /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.pdb8F6A6B3154428DA5DB17FDD17ABAEE1\HelloWorld64.pd_ [Force: T, Compress: T]

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

但是,当加载 DMP 文件时,WinDbg 无法找到 .pd_ 而是寻找 .pdb

    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.pdb8F6A6B3154428DA5DB17FDD17ABAEE1\HelloWorld64.pdb - file not found
     SYMSRV:  RESULT: 0x00000000
     DBGHELP: HelloWorld64.pdb - file not found
     DBGHELP: HelloWorld64 - no symbols loaded

有什么想法吗?谢谢!

symsrv 仅当您有压缩的 pdb 时才能使用未压缩的 pdb 您需要一个可以解压缩的缓存 下面的演练完成于 Microsoft (R) Windows 调试器版本 10.0.19528.1000 AMD64

如果您使用 symstore 来存储压缩的 pdb,那么在 symsrv 可以找到它之前,您需要一个本地缓存来解压缩它

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.pdbC481DA1FE5E450F947D744F14D014272\deto.pdb - file not found
SYMSRV:  RESULT: 0x00000000
DBGHELP: F:\src\deto\deto.pdb - file not found
DBGHELP: deto - no symbols loaded

上面没有找到符号,因为那里只有 deto.pd_ 存在,使用 symstore.exe

存储
F:\src\deto>dir /s /b f:\symbols\deto.pdbC481DA1FE5E450F947D744F14D014272\
f:\symbols\deto.pdbC481DA1FE5E450F947D744F14D014272\deto.pd_
f:\symbols\deto.pdbC481DA1FE5E450F947D744F14D014272\refs.ptr

临时更改了 sympath 以添加本地缓存

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

现在可以在 f:\test 中访问 .reload 符号(它还会将 ntdll.pdb 和其他符号从 f:\symbols 复制到 f:\test,然后再访问它们

compress 选项主要用于符号服务器操作(对于千兆字节的版本,你有数 PB 的符号)如果你编译它们只需存储然后解压缩并摆脱头痛

0:000> .reload /f
Reloading current modules
.SYMSRV:  BYINDEX: 0x8
         f:\test*f:\symbols
         deto.pdb
         3C481DA1FE5E450F947D744F14D014272
SYMSRV:  UNC: f:\test\deto.pdbC481DA1FE5E450F947D744F14D014272\deto.pdb - path not found
SYMSRV:  UNC: f:\test\deto.pdbC481DA1FE5E450F947D744F14D014272\deto.pd_ - path not found
SYMSRV:  UNC: f:\test\deto.pdbC481DA1FE5E450F947D744F14D014272\file.ptr - path not found
SYMSRV:  UNC: f:\symbols\deto.pdbC481DA1FE5E450F947D744F14D014272\deto.pdb - file not found
SYMSRV:  deto.pd_ from f:\symbols: uncompressed
SYMSRV:  PATH: f:\test\deto.pdbC481DA1FE5E450F947D744F14D014272\deto.pdb
SYMSRV:  RESULT: 0x00000000
DBGHELP: deto - private symbols & lines 
        f:\test\deto.pdbC481DA1FE5E450F947D744F14D014272\deto.pdb