调试器符号选项

有许多选项可用于控制符号的加载和使用方式。这些选项可以通过多种方式设置。

下表列出了这些符号选项:

Flag Option Name Default in debugger Default in DBH

0x1


SYMOPT_CASE_INSENSITIVE


On


On


0x2


SYMOPT_UNDNAME


On


On


0x4


SYMOPT_DEFERRED_LOADS


On


Off


0x8


SYMOPT_NO_CPP


Off


Off


0x10


SYMOPT_LOAD_LINES


Off in KD and CDB

On in WinDbg


On


0x20


SYMOPT_OMAP_FIND_NEAREST


On


Off


0x40


SYMOPT_LOAD_ANYTHING


Off


Off


0x80


SYMOPT_IGNORE_CVREC


Off


Off


0x100


SYMOPT_NO_UNQUALIFIED_LOADS


Off


Off


0x200


SYMOPT_FAIL_CRITICAL_ERRORS


On


Off


0x400


SYMOPT_EXACT_SYMBOLS


Off


On


0x800


SYMOPT_ALLOW_ABSOLUTE_SYMBOLS


Off


On


0x1000


SYMOPT_IGNORE_NT_SYMPATH


Off


Off


0x2000


SYMOPT_INCLUDE_32BIT_MODULES


Off


Off


0x4000


SYMOPT_PUBLICS_ONLY


Off


Off


0x8000


SYMOPT_NO_PUBLICS


Off


Off


0x10000


SYMOPT_AUTO_PUBLICS


On


On


0x20000


SYMOPT_NO_IMAGE_SEARCH


On


Off


0x40000


SYMOPT_SECURE


Off


Off


0x80000


SYMOPT_NO_PROMPTS


On in KD and CDB

Off in WinDbg


Off


0x80000000


SYMOPT_DEBUG


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

此符号选项防止DbgHelp在加载符号时在磁盘中搜索image的副本。默认情况下,在所有调试器中都启用此选项。调试程序运行后,可以分别使用.symopt+0x20000或.symopt-0x20000来打开或关闭它。默认情况下,在DBH中此选项处于禁用状态。一旦DBH运行,就可以分别使用symopt+20000或symopt-20000来打开或关闭它。

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命令来打开和关闭它。

原文地址:https://www.cnblogs.com/yilang/p/11989991.html

时间: 2024-11-05 18:59:00

调试器符号选项的相关文章

GCC编译器和GDB调试器常用选项

http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello                   #将hello.c编译成hello可执行文件 gcc -E hello.c -o hello.i              #将hello.c 转换成预处理后的文件hello.igcc -S hello.c -o hello.S              #将hello.c 转换成汇编文件 h

Delphi应用程序的调试(十)调试器选项(在IDE中不要使用异常)

可在两个级别上设置调试选项:工程级和环境级.在前面的讲解中讲解了工程级调试选项,通过主菜单[Project | Options…]打开如下对话框: 可在Debugger Options对话框中设置全局级调试选项.从主菜单[Tools | Debugger Options]菜单项调出Debugger Options对话框. 在Debugger Options对话框的底部有一个标记为Integrated debugging的复选框,它控制是否使用IDE调试器调试程序.如果选中Integrated d

Delphi应用程序的调试(十)调试器选项

可在两个级别上设置调试选项:工程级和环境级.在前面的讲解中讲解了工程级调试选项,通过主菜单[Project | Options…]打开如下对话框: 可在Debugger Options对话框中设置全局级调试选项.从主菜单[Tools | Debugger Options]菜单项调出Debugger Options对话框. 在Debugger Options对话框的底部有一个标记为Integrated debugging的复选框,它控制是否使用IDE调试器调试程序.如果选中Integrated d

[Win32]一个调试器的实现(五)调试符号

[Win32]一个调试器的实现(五)调试符号 作者:Zplutor 出处:http://www.cnblogs.com/zplutor/ 本文版权归作者和博客园共有,欢迎转载.但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 一个调试器应该可以跟踪被调试程序执行到了什么地方,显示下一条将要执行的语句,显示各个变量的值,设置断点,进行单步执行等等,这些功能都需要一个基础设施的支持,那就是调试符号. 什么是调试符号 我们知道,在exe.dll等可执行文件

[Win32]一个调试器的实现(九)符号模型

[Win32]一个调试器的实现(九)符号模型 作者:Zplutor 出处:http://www.cnblogs.com/zplutor/ 本文版权归作者和博客园共有,欢迎转载.但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 在接下来的文章中会讲解如何在调试器中显示局部变量和全局变量的类型和值.实现这个功能一定要有调试符号的支持,因为调试符号记录了每个变量的名称,类型,地址,长度等信息.这不是一件轻松的事情,因为你首先要对符号模型有一定的了解.所以本

若要调试此模块,请将其项目生成配置更改为“调试”模式。若要取消显示此消息,请禁用“启动时若没有用户代码则发出警告”调试器选项

在VS调试的时候出现如下错误: [plain] view plain copy print? 生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\...\*.DLL 若要调试此模块,请将其项目生成配置更改为“调试”模式.若要取消显示此消息,请禁用“启动时若没有用户代码则发出警告”调试器选项. 问题1: 1.右击“解决方案”选择“配置管理器”,将"release”改

【转】浅谈LLDB调试器

随着Xcode 5的发布,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器.它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.LLDB为Xcode提供了底层调试环境,其中包括内嵌在Xcode IDE中的位于调试区域的控制面板,在这里我们可以直接调用LLDB命令.如图1所示: 图1:位于Xcode调试区域的控制台 在本文中,我们主要整理一下LLDB调试器提供给我们的调试命令,更详细的内容可以查看The LLDB Debugger. LLDB命令结构 在使用LL

学习笔记之--认识Xcode中的重要成员:lldb调试器

之前对lldb调试器了解比较少,平时主要用来打印日志和暂定时用鼠标查看属性数据以及使用p po一些简单的命令语句. 今天看了一些关于lldb的文章,顿时觉得之前对它了解太少了,原来它还有那么多的功能. 好记性不如烂笔头,我把方便易用的命令记录下来,方便以后查看. 一.ldb的语法结构 lldb的语法结构如下:<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]

与调试器共舞 - LLDB 的华尔兹

你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? 1 NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? 1 NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? 1 if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? 1 2 3 4 5 6 int calculateTheTrickyValue {   return 9;