2013-09-12 3 views
3

Есть ли способ получить путь к файлу pdb, который в настоящее время используется windbg? Либо с помощью собственной команды, либо, предпочтительно, с помощью API-интерфейса плагина.Получить путь к файлу .pdb от windbg

Таким образом, в идеале я хочу, чтобы иметь возможность сделать что-то вроде:

printf(getSymbolFile("ntdll.dll")); 

, который будет печатать "C: \ Symbols \ ntdll.pdb"

ответ

4

Вы можете использовать команду Windbg !lmi mydll.dll

Так ntdll.dll имя изображения будет отображаться путь:

:004> !lmi ntdll 
Loaded Module Info: [ntdll] 
     Module: ntdll 
    Base Address: 00000000776f0000 
    Image Name: C:\Windows\SYSTEM32\ntdll.dll 
    Machine Type: 34404 (X64) 
    Time Stamp: 51fb164a Fri Aug 02 03:15:38 2013 
      Size: 1a9000 
     CheckSum: 1a9bda 
Characteristics: 2022 perf 
Debug Data Dirs: Type Size  VA Pointer 
      CODEVIEW 22, 101268, 100668 RSDS - GUID: {400F215C-54DA-4047-88F8-4F5C50491495} 
       Age: 2, Pdb: ntdll.pdb 
       CLSID  4, 101264, 100664 [Data not mapped] 
    Image Type: FILE  - Image read successfully from debugger. 
       C:\Windows\SYSTEM32\ntdll.dll 
    Symbol Type: PDB  - Symbols loaded successfully from symbol server. 
       C:\Program Files\Windows Kits\8.0\Debuggers\x64\sym\ntdll.pdb\400F215C54DA404788F84F5C504914952\ntdll.pdb 
    Load Report: public symbols , not source indexed 
       C:\Program Files\Windows Kits\8.0\Debuggers\x64\sym\ntdll.pdb\400F215C54DA404788F84F5C504914952\ntdll.pdb 

Это немного подробный.

Благодаря @SeanCline указав- недокументированные команды !itoldyouso, который делает то же самое, как !chksym

0:030> !itoldyouso ntdll 

C:\Windows\SYSTEM32\ntdll.dll 
    Timestamp: 51FB164A 
    SizeOfImage: 1A9000 
      pdb: ntdll.pdb 
     pdb sig: 400F215C-54DA-4047-88F8-4F5C50491495 
      age: 2 

Loaded pdb is C:\Program Files\Windows Kits\8.0\Debuggers\x64\sym\ntdll.pdb\400F215C54DA404788F84F5C504914952\ntdll.pdb 

ntdll.pdb 
     pdb sig: 400F215C-54DA-4047-88F8-4F5C50491495 
      age: 2 

MATCH: ntdll.pdb and C:\Windows\SYSTEM32\ntdll.dll 

Это по-прежнему довольно многословно, вы сохраните несколько строк.

+2

Только для символьной информации, вы можете также использовать недокументированные команды [! 'Itoldyouso'] (http://blogs.msdn.com/b/debuggingtoolbox/archive/2009/09/04/special-command-using-chksym-itoldyouso-to-check-pdb-files-against-modules.aspx). –

+0

@SeanCline ах да, я забыл об этом, я добавлю вывод к моему ответу, спасибо – EdChum

2

Это может быть сделано с lm (список модулей) и модуль фильтра (m) для ntdll:

0:017> lm m ntdll 
start end  module name 
77aa0000 77c20000 ntdll  (pdb symbols)   e:\debug\symbols\wntdll.pdb\370278F5B1BA4A16B0DC8199E9623C3C2\wntdll.pdb 
Смежные вопросы