如何在WinDbg中设置符号?

我正在使用Windows的debugging工具,并且在启动WinDbg / cdb或ntsd时收到以下错误消息:

Symbol search path is: *** Invalid *** **************************************************************************** * Symbol loading may be unreliable without a symbol search path. * * Use .symfix to have the debugger choose a symbol path. * * After setting your symbol path, use .reload to refresh symbol locations. * **************************************************************************** 

执行任意命令时,我也会得到错误信息

 *** ERROR: Module load completed but symbols could not be loaded for <module>.<ext> 

以下似乎是相关的:

 ********************************************************************* * Symbols can not be loaded because symbol path is not initialized. * * * * The Symbol Path can be set by: * * using the _NT_SYMBOL_PATH environment variable. * * using the -y <symbol_path> argument when starting the debugger. * * using .sympath and .sympath+ * ********************************************************************* 

!analyze -v我也看到了

 DEFAULT_BUCKET_ID: WRONG_SYMBOLS 

 ************************************************************************* *** *** *** Either you specified an unqualified symbol, or your debugger *** *** doesn't have full symbol information. Unqualified symbol *** *** resolution is turned off by default. Please either specify a *** *** fully qualified symbol module!symbolname, or enable resolution *** *** of unqualified symbols by typing ".symopt- 100". Note that *** *** enabling unqualified symbol resolution with network symbol *** *** server shares in the symbol path may cause the debugger to *** *** appear to hang for long periods of time when an incorrect *** *** symbol name is typed or the network symbol server is down. *** *** *** *** For some commands to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** ************************************************************************* 

如何设置WinDbg来查找符号?

免责声明:这是对windbg中所有错误的符号post的规范问题。

符号可以以各种不同的方式正确设置。

警告 :这里的示例使用\\server\symbols ,这通常是不可用的networking存储。 如果你没有这个服务器,可以将它适配到你的本地服务器,或者把这个部分完全放弃。 不存在的服务器可能会导致延迟等。

TLDR版本为80%的情况

为Microsoft提供的c:\symbols创build一个新的文件夹c:\symbols 。 然后键入

 .symfix+ c:\symbols .reload 

(或者必要时reload -f

确保你有一个互联网连接,因为这将联系一些微软服务器,并从那里下载符号。

在80%以上的情况下,这可能已经解决了你的符号问题。 如果没有,请继续阅读。

通过命令修复符号

WinDbg将按照它们出现在符号path中的顺序查找符号。 因此,先放置本地符号,然后放置一些公司本地networking共享,然后从Internet上下载符号并在本地存储一个副本是一个好主意。

 .sympath c:\mysymbols ; *** Symbols of your application, locally, flat list of PDB files .sympath+ cache*c:\symbolcache ; *** (optional) Create a cache for everything .sympath+ \\server\symbols ; *** Symbols provided from a network share .symfix+ c:\symbols ; *** Microsoft symbols 

通过菜单修复符号

在WinDbg(但不是相应的命令行)中,可以通过File/Symbol File Path...或按Ctrl + S来设置符号path。 你用下面的格式input它

 c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

通过命令行修复符号

WinDbg也采用-y命令行开关,如果你喜欢有不同的符号path设置不同的桌面链接。

 WinDbg -y "<symbol path>" 

请注意,您需要完整的path,这是一个像

 c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

通过环境variables修复符号

有一个名为_NT_SYMBOL_PATH的环境variables,它也可以设置为符号path。 使用以下语法:

 c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

请注意,不仅WinDbg评估此variables,而且Visual Studio,进程浏览器,进程监视器和潜在的其他软件。 您可能会遇到性能影响设置此环境variables。

将符号path保存为工作区的一部分

如果您有一个相当复杂的符​​号设置,其中包含多个path,请熟悉WinDbg工作区的概念 。

工作区允许您保存符号path,因此您不必在每个debugging会话中重新input所有命令。

一旦你对工作区感到满意,为WinDbg创build一个链接来包含-Q这意味着“抑制恼人的”保存工作空间?“问题”。

到目前为止,我很高兴将符号保存为Base工作区的一部分。

延期符号

延迟符号(在lm命令中表示为这样)不成问题。 WinDbg会在需要时加载它们。 要强制加载所有这些,请键入

 ld* 

debugging符号问题

如果符号(PDB)不能按预期工作,请使用

 !sym noisy 

以获得有关parsing符号时WinDbg究竟在做什么的更多信息。

当您find解决scheme时,请closures它

 !sym quiet 

要检查各个符号是否正确,可以使用WinDbg附带的symchk工具。

 Symchk /if <exe> /s <symbol path> /av /od /pf /if = input is a file /s = symbol file path /od = all details /av = verify /pf = check if private symbols are available 

或者获得ChkMatch ,这是一个更容易使用

 ChkMatch -c <exe file> <pdb file> 

如果您无法从networking共享中访问符号,请确保先login到networking共享。 AFAIR,WinDbg不要求凭证。

官方文件

使用Microsoft符号服务器获取debugging符号文件 (应在此处redirect,但redirect目前已中断)

Windowsdebugging器的符号path