GCC符号表调试信息.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GCC把C语言源文件('.c')编译成汇编语言文件('.s'),汇编器把汇编语言文件翻译成目标文件('.o'),最后由链接器链接所有的目标文件和有关的库生成可执行文件('a.out')。 如打开'-g'选项,GCC编译'.c'文件时,把附加的调试信息插进'.s'文件,这些调试信息经汇编器和链接器稍加转换一直传到可执行文件中。这些调试信息包括行号、变量的类型和作用域、函数名字、函数参数和函数的作用域等源文件的特性。 在某些目标文件中,调试信息用'.stab'打头的一类汇编指导命令表示,这些指导命令穿插在汇编代码中,这种调试信息格式叫'Stab',即符号表(Symbol table)。XCOFF和a.out目标文件格式采用Stab调试信息格式。此外,GCC也能在COFF和ECOFF目标文件格式中产生Stab。如要生成Stab调试信息,在GCC编译源文件时,打开编译选项'-gstabs+'(此选项将产生GNU调试器扩展的Stab的调试信息)或'-gstabs'。 汇编器处理'.stab'打头指导命令,把Stab中的调试信息填入'.o'文件的符号表和串表(string table)中,链接器合并所有'.o'文件生成只含有一个符号表和一个串表的可执行文件。调试器通过检索可执行文件中的符号表和串表来获得程序的调试信息,下面分别介绍Stab的格式,GCC生成Stab和汇编链接器对Stab转换。 1 Stab的格式 Stab汇编指导命令有3种格式:'.stabs'(string), '.stabn'(number)和'.stabd'(dot)。在MIPS机器上,GCC采用'.stabn'输出源程序语句行号的Stab调试信息,而未使用'.stabd',因此,在MIPS机器上,GCC生成的带有Stab调试信息的汇编代码中只含'.stabs'和'.stabn'两种汇编指导命令,'.stabs'和'.stabn'命令格式如下: .stabs ″STRING″,TYPE,OTHER,DESC,VALUE .stabn TYPE,OTHER,DESC,VALUE 下面说明Stab汇编指导命令的各域。 ″STRING″的一般格式是:″NAME:SYM-DESC TYPE-INFO″ 其中,NAME是由Stab表示的符号的名字,如果Stab表示是一个匿名对象,则NAME可省略,一般以一空格代替。SYM-DESC为一字母,它具体表示Stab所描述的是哪一类符号,例如: SYM-DESC为'F',表示Stab描述的是全局函数;为'f'时,表示局部函数;为'G'时,表示全局变量。TYPE-INFO则表示数据类型信息,它可以是Stab分配给已定义的数据类型的序号,表示对已定义的数据类型的引用;也可以是一串符号,用来定义一种新的数据类型,参见1.3数据类型定义。 OTHER没有使用,其值保持零。 DESC用编译开关'-gstabs+'编译源文件,DESC为源程序的语句行号;用编译开关'-gstabs'编译源文件,DESC为零。 VALUE可为一符号地址,或为自动变量在当前栈里相对帧指针的偏移量,或为寄存器变量所分配的寄存器的号码。 以下各小节将结合实例对Stab描述调试信息的格式作具体的阐述。 1.1 Stab描述程序结构 (1)源文件的名字和路径 在含有调试信息的汇编代码中,第一个Stab汇编指导命令指明所编译的源文件的名字,如果打开GCC编译开关'-gstabs+',还会指明该源文明所在的目录,例如: .stabs ″usr/people/ycq/work / ″, 100, 0, 0, $Ltext( ) #100 is N-SO .stabs ″example.c″, 100, 0, 0, $Ltext( ) 其中TYPE为N-SO,表示该Stab描述的是源文件的名字或路径,$Ltext( )表示与该文件相对应的代码区的首地址。 (2)包含文件 描述包含文件的Stab指明随后出现的变量、函数等符号所要参考的源文件,调试器由此查找到定义该符号的源文件。STRING为被包含文件名,TYPE=N-SOL,VALUE为被包含文件代码区的首地址,如: .stabs ″example.c″, 132, 0, 0, $Ltext1 #132 is N-SOL (3)行号 行号表示汇编程序中的一段代码所对应的C源程序的语句行号。汇编指导命令采用'gstabn',TYPE=N-SLINE,DESC表示源程序的语句行号,VALUE为该语句行所对应的一段汇编代码的起始标号,例如: .stabn 68, 0, 4, $LM6 #68 is N-SLINE 如果一源程序行所产生的汇编代码不连续,可用多条'.stabn'表示,而DESC为同一值。 (4) 函数 描

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档