Предварительный просмотр WinDbg не загружает сжатые файлы символов .pd_ - PullRequest
0 голосов
/ 07 апреля 2020

Предварительный просмотр WinDbg

Мой путь к символу:

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

В папке символов

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

есть эти два файла

    HelloWorld64.pd_
    refs.ptr

Для создания вышеуказанного сжатого .pd_ я использовал опцию / compress :

    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

Однако при загрузке файла 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.pdb\408F6A6B3154428DA5DB17FDD17ABAEE1\HelloWorld64.pdb - file not found
     SYMSRV:  RESULT: 0x00000000
     DBGHELP: HelloWorld64.pdb - file not found
     DBGHELP: HelloWorld64 - no symbols loaded

Есть идеи? Спасибо!

1 Ответ

3 голосов
/ 07 апреля 2020

symsrv может работать с несжатыми pdb, только если у вас есть сжатые pdbs, вам нужен кеш, где он может быть распакован. Пошаговое руководство по 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.pdb\3C481DA1FE5E450F947D744F14D014272\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.pdb\3C481DA1FE5E450F947D744F14D014272\
f:\symbols\deto.pdb\3C481DA1FE5E450F947D744F14D014272\deto.pd_
f:\symbols\deto.pdb\3C481DA1FE5E450F947D744F14D014272\refs.ptr

временно изменил симпат для добавления локального кэша.

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

. Символы .reload теперь доступны в f: \ test (он также будет копировать ntdll.pdb и другие файлы из f: \ Символы для f: \ test перед доступом к ним

Параметр сжатия в основном используется для операций на сервере символов (где у вас есть петабайты символов для гигабайт версий), если вы компилируете их, просто сохраняете их, затем распаковываете и избавляете от головной боли

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
...