- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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) 函数 描
您可能关注的文档
- G470A双显卡如何切换.doc
- G900简易调时间方法.doc
- GA304-2001排水塑料管阻火圈安装规范.doc
- G8服务器SPP安装.docx
- GA-WIC-81PCBA外协加工质量及包装要求2.doc
- GA306阻燃及耐火电缆塑料绝缘.doc
- gaidegengxin过程装备制造与检测.doc
- GAGBGC胶工艺单.doc
- Gaiufs法语变位.doc
- gambit帮助使用建模工具.doc
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)