【问题标题】:How do I get the symbols for a single DLL without having a dump?如何在没有转储的情况下获取单个 DLL 的符号?
【发布时间】:2015-09-07 18:56:01
【问题描述】:

我有一个 DLL 或 EXE 文件,我想为其获取符号(PDB 文件),即从符号服务器下载。

注意: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

我的符号文件夹中没有符号。

【问题讨论】:

    标签: debugging windbg debug-symbols crash-dumps


    【解决方案1】:

    您使用了/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
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多