调试器符号选项
有许多选项可用于控制符号的加载和使用方式。这些选项可以通过多种方式设置。
下表列出了这些符号选项:
Flag | Option Name | Default in debugger | Default in DBH |
---|---|---|---|
0x1 |
On |
On |
|
0x2 |
On |
On |
|
0x4 |
On |
Off |
|
0x8 |
Off |
Off |
|
0x10 |
Off in KD and CDB On in WinDbg |
On |
|
0x20 |
On |
Off |
|
0x40 |
Off |
Off |
|
0x80 |
Off |
Off |
|
0x100 |
Off |
Off |
|
0x200 |
On |
Off |
|
0x400 |
Off |
On |
|
0x800 |
Off |
On |
|
0x1000 |
Off |
Off |
|
0x2000 |
SYMOPT_INCLUDE_32BIT_MODULES |
Off |
Off |
0x4000 |
Off |
Off |
|
0x8000 |
Off |
Off |
|
0x10000 |
On |
On |
|
0x20000 |
On |
Off |
|
0x40000 |
Off |
Off |
|
0x80000 |
On in KD and CDB Off in WinDbg |
Off |
|
0x80000000 |
Off |
Off |
更改符号选项设置
.symopt(设置符号选项)命令可用于更改或显示符号选项设置。此外,可以使用许多命令行参数和命令来更改这些设置;这些参数和命令在各个SYMOPT_XXX部分中列出。
您还可以使用-sflagscommand-line选项同时控制所有设置。此选项后面可以跟一个十进制数,也可以跟一个前缀为0x的十六进制数。建议您使用十六进制,因为符号标志是以这种方式正确对齐的。使用此方法时要小心,因为它设置了整个位字段并将覆盖所有符号处理程序默认值。例如,-sflags 0x401不仅将启用SYMOPT_EXACT_SYMBOLS和SYMOPT_CASE_INSENSITIVE,而且还将禁用默认情况下正常打开的所有其他选项!
当这些程序在没有任何与符号相关的命令行选项的情况下启动时,WinDbg中的总标志位的默认值为0x30237,CDB和KD中的默认值为0xB0227,DBH工具中的默认值为0x10C13。
SYMOPT_CASE_INSENSITIVE
此符号选项导致对符号名的所有搜索都不区分大小写。默认情况下,在所有调试器中都启用此选项。调试器运行后,可以分别使用.symopt+0x1或.symopt-0x1来打开或关闭它。在DBH中,默认情况下启用此选项。一旦DBH运行,就可以分别使用symopt+1或symopt-1来打开或关闭它。
SYMOPT_UNDNAME
这个符号选择公共符号的名称在显示时被理解,原因搜索符号名称以忽略符号装饰。私人符号名称从来没有装饰过,请注意此选项是否有效。此选项适用于所有调试器。当调试器运行时,它可以通过SYMOPT+0x2或SYMOPT-0x2分别打开或关闭。这个选项在DBH中是默认打开的。如果使用了-d选项,就取消了。一旦DBH运行,它可以通过SYMOPT+2或SYMOPT+2打开或关闭。
SYMOPT_DEFERRED_LOADS
此符号选项称为延迟符号加载或延迟符号加载。当它处于活动状态时,在加载目标模块时不会实际加载符号。相反,调试器根据需要加载符号。默认情况下,在所有调试器中都启用此选项。在CDB和KD中,-s选项将关闭此选项。也可以在CDB中使用tools.ini文件中的LazyLoad变量来关闭它。调试器运行后,可以分别使用.symopt+0x4或.symopt-0x4来打开或关闭此选项。默认情况下,在DBH中此选项处于禁用状态。一旦DBH运行,就可以分别使用symopt+4或symopt-4来打开或关闭它。
SYMOPT_NO_CPP
这个符号选项关闭C++翻译。设置此符号选项时,所有符号中的::将替换为__ 。默认情况下,在所有调试器中都禁用此选项。它可以通过使用-snc选项激活。调试程序运行后,可以分别使用.symopt+0x8或.symopt-0x8来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。一旦DBH运行,就可以分别使用symopt+8或symopt-8来打开或关闭它。
SYMOPT_LOAD_LINES
此符号选项允许从源文件中读取行号信息。必须启用此选项,源调试才能正常工作。在KD和CDB中,此选项默认为关闭;在WinDbg中,此选项默认为打开。在CDB和KD中,-lines命令行选项将启用此选项。调试程序运行后,可以分别使用.symopt+0x10或.symopt-0x10来打开或关闭它。也可以使用.lines(Toggle Source Line Support)命令来打开和关闭它。在DBH中,默认情况下启用此选项。一旦DBH运行,就可以分别使用symopt+10或symopt-10来打开或关闭它。
SYMOPT_OMAP_FIND_NEAREST
当代码已优化且预期位置没有符号时,此选项将使用最近的符号。默认情况下,在所有调试器中都启用此选项。调试器运行后,可以分别使用.symopt+0x20或.symopt-0x20来打开或关闭它。在DBH中,默认情况下启用此选项。运行DBH之后,可以分别使用symopt+20或symopt-20来打开或关闭它。
SYMOPT_LOAD_ANYTHING
此符号选项可减少符号处理程序在尝试匹配符号时的挑剔程度。默认情况下,在所有调试器中都禁用此选项。调试程序运行后,可以分别使用.symopt+0x40或.symopt-0x40来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。一旦DBH运行,就可以分别使用symopt+40或symopt-40来打开或关闭它。
SYMOPT_IGNORE_CVREC
此符号选项使符号处理程序在搜索符号时忽略加载的image header中的CV记录。默认情况下,在所有调试器中都禁用此选项。它可以通过使用-sicv命令行选项激活。调试程序运行后,可以分别使用.symopt+0x80或.symopt-0x80来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。一旦DBH运行,就可以分别使用symopt+80或symopt-80来打开或关闭它。
SYMOPT_NO_UNQUALIFIED_LOADS
此符号选项禁用符号处理程序自动加载模块。当设置此选项并且调试器尝试匹配符号时,它将只搜索已加载的模块。此选项可用于防止错误输入符号名称。通常,键入错误的符号将导致调试器在搜索所有卸载的符号文件时暂停。当此选项处于活动状态时,在加载的模块中找不到键入错误的符号,然后搜索将终止。默认情况下,在所有调试器中都禁用此选项。它可以通过使用-snul命令行选项激活。调试器运行后,可以分别使用.symopt+0x100或.symopt-0x100来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。运行DBH之后,可以分别使用symopt+100或symopt-100来打开或关闭它。
SYMOPT_FAIL_CRITICAL_ERRORS
此符号选项将禁止显示文件访问错误对话框。如果禁用此选项,则在符号加载期间遇到的文件访问错误(如“驱动器未就绪”)将导致出现对话框。如果启用此选项,则这些框将被抑制,所有访问错误都将收到“失败”响应。默认情况下,在所有调试器中都启用此选项。可以使用-sdce命令行选项停用它。调试程序运行后,可以分别使用.symopt+0x200或.symopt-0x200来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。运行DBH之后,可以分别使用symopt+200或symopt-200来打开或关闭它。
SYMOPT_EXACT_SYMBOLS
此符号选项使调试器对所有符号文件执行严格的求值。启用此选项时,即使符号文件与符号处理程序的期望值之间存在微小差异,也会导致忽略符号。默认情况下,在所有调试器中都禁用此选项。它可以通过使用-ses命令行选项激活。调试程序运行后,可以分别使用.symopt+0x400或.symopt-0x400来打开或关闭它。-failinc命令行选项还可以打开SYMOPT_EXACT_SYMBOLS。此外,如果正在调试用户模式minidump或内核模式minidump,-failinc将阻止调试器加载其映像无法映射的任何模块。在DBH中,默认情况下启用此选项。一旦DBH运行,就可以分别使用symopt+400或symopt-400来打开或关闭它。
SYMOPT_ALLOW_ABSOLUTE_SYMBOLS
此符号选项允许DbgHelp读取存储在内存中绝对地址的符号。在绝大多数情况下不需要这种选择。默认情况下,在所有调试器中都禁用此选项。调试程序运行后,可以分别使用.symopt+0x800或.symopt-0x800来打开或关闭它。在DBH中,默认情况下启用此选项。一旦DBH运行,就可以分别使用symopt+800或symopt-800来打开或关闭它。
SYMOPT_IGNORE_NT_SYMPATH
此符号选项使调试器忽略符号路径和可执行映像路径的环境变量设置。默认情况下,在所有调试器中都禁用此选项。它可以通过使用-sins命令行选项激活。但是,一旦调试器运行,它就不能由.symopt控制,因为环境变量只在启动时读取。此选项在DBH中默认为禁用,在所有情况下都被DBH忽略。
SYMOPT_PUBLICS_ONLY
此符号选项使DbgHelp忽略私有符号数据,并仅搜索公共符号表以获取符号信息。这将在添加对这些类型的支持之前模拟DbgHelp的行为。默认情况下,在所有调试器中都禁用此选项。调试程序运行后,可以分别使用.symopt+0x4000或.symopt-0x4000来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。如果使用-d命令行选项,则该选项处于启用状态。一旦DBH运行,就可以分别使用symopt+4000或symopt-4000来打开或关闭它。
SYMOPT_NO_PUBLICS
此符号选项防止DbgHelp搜索公共符号表。这可以使符号枚举和符号搜索更快。如果您只关心搜索速度,则SYMOPT_AUTO_PUBLICS选项通常比此选项更可取。有关公共符号表的信息。默认情况下,在所有调试器中都禁用此选项。调试程序运行后,可以分别使用.symopt+0x8000或.symopt-0x8000来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。DBH运行后,可以分别使用symopt+8000或symopt-8000来打开或关闭它。
SYMOPT_AUTO_PUBLICS
此符号选项使DbgHelp只能作为最后的手段在.pdb文件中搜索公共符号表。如果在搜索专用符号数据时发现任何匹配项,则不会搜索公用符号。这提高了符号搜索速度。默认情况下,在所有调试器中都启用此选项。可以使用-sup命令行选项停用它。调试程序运行后,可以分别使用.symopt+0x10000或.symopt-0x10000来打开或关闭它。在DBH中,默认情况下启用此选项。如果使用-d命令行选项,则该选项将关闭。运行DBH之后,可以分别使用symopt+10000或symopt-10000来打开或关闭它。
SYMOPT_NO_IMAGE_SEARCH
SYMOPT_SECURE
(仅限内核模式)此符号选项指示安全模式是否处于活动状态。默认情况下,安全模式在所有调试器中都处于关闭状态。它可以通过使用-secure命令行选项激活。如果调试器正在运行、处于休眠模式且未建立任何调试服务器,则可以使用.symopt+0x40000或.Secure(激活安全模式)打开安全模式。默认情况下,在DBH中该选项处于禁用状态。一旦DBH运行,就可以分别使用symopt+40000或symopt-40000来打开或关闭它。一旦安全模式被激活,它就永远无法关闭
SYMOPT_NO_PROMPTS
此符号选项抑制代理服务器的对话框认证。这可能导致SYMSRV无法访问因特网上的符号库。
在KD和CDB中,此选项是默认打开;在Windbg中,此选项默认关闭。一旦调式器运行,它可以通过SYMOPT+0x80000或SYMOPT-0x80000或以上的方式打开或关闭。它也可以被转换,然后退出!快速启动!sym快速扩展命令,然后是.reload(reload Module)命令。此选项在DBH中默认关闭。一次DBH是运行,它可以通过SYMOPT+80000或SYMOPT+80000转换或转换。
SYMOPT_DEBUG
此符号选项打开噪声符号加载。这指示调试器显示有关其搜索符号的信息。加载时将显示每个符号文件的名称。如果调试器无法加载符号文件,则将显示错误消息。.pdb文件的错误消息将以文本形式显示。.dbg文件的错误消息将以错误代码的形式出现;这些代码将在winerror.h文件中解释。如果加载 image文件只是为了恢复符号头信息,则也会显示此信息。默认情况下,在所有调试器中都禁用此选项。它可以通过使用-n命令行选项激活。调试程序运行后,可以分别使用.symopt+0x8000000或.symopt-0x8000000来打开或关闭它。也可以使用打开和关闭!sym吵闹而且!sym quiet扩展命令。不应将此选项与噪声源加载混淆--噪声源加载由 .srcnoisy(噪声源加载)命令控制。默认情况下,在DBH中此选项处于禁用状态。它可以通过使用-n命令行选项激活。运行DBH后,可以分别使用symopt+8000000或symopt-8000000来打开或关闭它。也可以使用verbose on和verbose off命令来打开和关闭它。