2015-09-07 23 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 

輸出是一樣的,但符號文件夾包含PDBS現在。


它類似於在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 
... 
相關問題