2015-09-07 16 views
1

У меня есть один DLL или EXE-файл, и я хотел бы получить для него символы (файл PDB), то есть загрузить с сервера символов.Как получить символы для одной DLL без дампа?

Примечание: DLL не является модулем, который является частью аварийного сброса, поэтому открытие дампа и выполнение .symfix и .reload невозможно.

Я попытался

symchk /os /if "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll" 
/su "SRV*e:\debug\symbols*http://msdl.microsoft.com/download/symbols" 

, но он просто говорит

SYMCHK: FAILED files = 0 
SYMCHK: PASSED + IGNORED files = 1 

и нет никаких символов в моей папке символов.

ответ

3

Вы использовали /if, который звучит правдоподобно, но на самом деле она должна быть /id для файла дампа:

symchk /os /id "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll" 
/su "SRV*e:\debug\symbols*http://msdl.microsoft.com/download/symbols" 

SYMCHK: FAILED files = 0 
SYMCHK: PASSED + IGNORED files = 1 

Выход же, но папка символ содержит PDB-файлы в настоящее время.


Он похож на WinDbg:

  • выбрать File | Open Crash Dump ... или нажмите Ctrl + D
  • для имени файла фильтра, вместо Crash Dump Files выбрать All files
  • выбрать DLL или EXE. WinDbg будет, например, говорят

    Loading Dump File [C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll] 
    

    хотя это на самом деле не файл дампа

  • вопрос типичные команды .symfix и .reload. Если символы присутствуют на сервере символов, они будут загружены.

Глядя на то, что вы "отладки", вы увидите, что это DLL:

0:000> | 
. 0 id: f0f0f0f0 examine name: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 

0:000> || 
. 0 Image file: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 

0:000> lm 
start    end     module name 
00000001`80000000 00000001`80988000 clr  (pdb symbols)   e:\debug\symbols\clr.pdb\5706A2AA257A45FDAC5776EDDC7BBA542\clr.pdb 

А также некоторые другие команды работают:

0:000> x clr!* 
00000001`80123e28 clr!SafeHandle::Init (<no parameter info>) 
00000001`808f5e80 clr!HillClimbingLogSize = <no type information> 
00000001`80064af0 clr!IsTimerSpecialThread (<no parameter info>) 
... 

0:000> u clr!SafeHandle::Init 
clr!SafeHandle::Init: 
00000001`80123e28 4883ec28  sub  rsp,28h 
00000001`80123e2c 488b059d4b7c00 mov  rax,qword ptr [clr!g_Mscorlib+0x10 (00000001`808e89d0)] 
00000001`80123e33 488b80e0070000 mov  rax,qword ptr [rax+7E0h] 
00000001`80123e3a 4885c0   test rax,rax 
...