尽管指向Microsoft符号服务器,但获取符号相关错误

时间:2011-09-09 15:11:55

标签: debugging windbg

尝试在Windbg中调试转储文件。它是一个托管与一些Microsoft本机库互操作。我已设置符号路径.sympath SRV * c:\ SymbolsCash * http://msdl.microsoft.com/download/symbols。

我没有任何问题加载了SOS。我可以运行sos命令而不会出现任何错误。我也可以运行大部分Windbg命令(如〜,kb,.time等),但是对于某些命令(例如,!address -summary),我得到以下错误。

  

您的调试器未使用正确的符号
  为了使此命令正常工作,您的符号路径为   必须指向具有完整类型信息的.pdb文件。

     

某些.pdb文件(例如公共OS符号)不是   包含所需的信息。联系该组   如果您需要此命令,请为您提供这些符号   工作。
  引用类型:ntdll!_NT_TIB

我在这里缺少什么想法?

3 个答案:

答案 0 :(得分:6)

从您的输出中,我们可以看到您没有ntdll的符号。请注意您使用“导出符号”的行(上面输出中的第3行)。这意味着您没有此模块的符号,并且调试器仅使用模块导出表中的条目。您需要的结构不包含在导出表的有限信息中。

您的符号路径应如下所示:

SRV*<local symbol cache directory>*http://msdl.microsoft.com/download/symbols

示例:

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

如果您正确设置了符号路径,则可以通过运行以下命令打开详细符号加载:

!sym noisy

然后强制重新加载ntdll.dll:

.reload /f ntdll.dll

使用输出确定您没有获得符号的原因。然后 通过运行来关闭详细符号加载:

!sym quiet

此外,在解决符号加载问题时,我更喜欢!lmi <binary>(例如!lmi ntdll)而不是lmvm。关于你拥有的东西,输出更清晰一些。在!lmi输出结束时,您将看到“加载报告”行。

答案 1 :(得分:0)

lmv mntdll说什么?

如输出所示,该类型可能不在该版本的公共PDB中。发现调试器扩展不能与特定版本的操作系统一起使用时,这种情况并不罕见。

答案 2 :(得分:0)

@snoone:下面是lmv mntdll命令的输出 0:000&GT; lmv mntdll
启动结束模块名称
76e40000 76f7c000 ntdll(导出符号)ntdll.dll
    加载的符号图像文件:ntdll.dll
    图像路径:C:\ Windows \ System32 \ ntdll.dll
    图像名称:ntdll.dll
    时间戳:2010年11月20日星期六07:05:02(4CE7B96E)
    CheckSum:001490D9
    ImageSize:0013C000
    文件版本:6.1.7601.17514
    产品版本:6.1.7601.17514
    文件标志:0(掩码3F)
    文件操作系统:40004 NT Win32
    文件类型:2.0 Dll
    档案日期:00000000.00000000
    翻译:0409.04b0
    公司名称:Microsoft Corporation
    产品名称:Microsoft®Windows®操作系统
    InternalName:ntdll.dll
    OriginalFilename:ntdll.dll
    产品版本:6.1.7601.17514
    FileVersion:6.1.7601.17514(win7sp1_rtm.101119-1850)
    FileDescription:NT Layer DLL
    LegalCopyright:©Microsoft Corporation。版权所有。