尝试在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
我在这里缺少什么想法?
答案 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。版权所有。