gcc调试选项

调试选项(DEBUGGING OPTION)GNU CC拥有许多特别选项,既可以调试用户的程序,也可以对GCC排错: 


-g 
以操作系统的本地格式(stabs, COFF, XCOFF,或DWARF).产生调试信息. GDB能够使用这些调试信息. 
在大多数使用stabs格式的系统上, `-g'选项启动只有GDB才使用的额外调试信息;这些信息使GDB 调试效果更好,但是有可能导致其他调试器崩溃,或拒绝读入程序.如果你确定要控制是否生成额外的信息, 使用`-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf+',或`-gdwarf' (见下文). 


和大多数C编译器不同, GNU CC允许结合使用`-g'和`-O'选项.优化的代码偶尔制造 一些惊异的结果:某些声明过的变量根本不存在;控制流程直接跑到没有预料到的地方;某些语句因为计算结果是常量或已经确定而 没有执行;某些语句在其他地方执行,因为他们被移到循环外面了. 


然而它证明了调试优化的输出是可能的.对可能含有错误的程序使用优化器是合理的. 


如果GNU CC支持输出多种调试信息,下面的选项则非常有用. 




-ggdb 
以本地格式(如果支持)输出调试信息,尽可能包括GDB扩展. 


-gstabs 
以stabs格式(如果支持)输出调试信息,不包括GDB扩展.这是大多数BSD系统上DBX使用的格式. 


-gstabs+ 
以stabs格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使用这些扩展有可能导致 其他调试器崩溃或拒绝读入程序. 


-gcoff 
以COFF格式(如果支持)输出调试信息.这是在System V第四版以前的大多数System V系统上SDB使用的 格式. 


-gxcoff 
以XCOFF格式(如果支持)输出调试信息.这是IBM RS/6000系统上DBX调试器使用的格式. 


-gxcoff+ 
以XCOFF格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使用这些扩展有可能导致 其他调试器崩溃或拒绝读入程序. 


-gdwarf 
以DWARF格式(如果支持)输出调试信息.这是大多数System V第四版系统上SDB使用的格式. 


-gdwarf+ 
以DWARF格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使用这些扩展有可能导致 其他调试器崩溃或拒绝读入程序. 


-glevel 
-ggdblevel 
-gstabslevel 
-gcofflevel -gxcofflevel 


-gdwarflevel 
请求生成调试信息,同时用level指出需要多少信息.默认的level值是2. 
Level 1输出最少量的信息,仅够在不打算调试的程序段内backtrace.包括函数和外部变量的描述,但是 没有局部变量和行号信息. 


Level 3包含更多的信息,如程序中出现的所有宏定义.当使用`-g3'选项的时候,某些调试器支持 宏扩展. 




-p 
产生额外代码,用于输出profile信息,供分析程序prof使用. 


-pg 
产生额外代码,用于输出profile信息,供分析程序gprof使用. 


-a 
产生额外代码,用于输出基本块(basic block)的profile信息,它记录各个基本块的执行次数,供诸如 tcov此类的程序分析.但是注意,这个数据格式并非tcov期待的.最终GNU gprof 将处理这些数据. 
-ax 
产生额外代码,用于从'bb.in'文件读取基本块的profile参数,把profile的结果写到'bb.out' 文件. `bb.in'包含一张函数列表.一旦进入列表中的某个函数, profile操作就开始,离开最外层的函数后, profile操作就结束.以`-'为前缀名的函数排除在profile操作之外.如果函数名不是唯一的,它可以写成 `/path/filename.d:functionname'来澄清. `bb.out'将列出一些有效的文件名.这四个函数名具有 特殊含义: `__bb_jumps__'导致跳转(jump)频率写进`bb.out'. `__bb_trace__'导致基本块序列通过 管道传到`gzip',输出`bbtrace.gz'文件. `__bb_hidecall__'导致从跟踪(trace)中排除call 指令. `__bb_showret__'导致在跟踪中包括返回指令. 


-dletters 
编译的时候,在letters指定的时刻做调试转储(dump).用于调试编译器.大多数转储的文件名 通过源文件名添加字词获得(例如`foo.c.rtl'或`foo.c.jump'). 


-dM 
预处理结束的时候转储所有的宏定义,不输出到文件. 


-dN 
预处理结束的时候转储所有的宏名. 


-dD 
预处理结束的时候转储所有的宏定义,同时进行正常输出. 


-dy 
语法分析(parse)的时候在标准错误转储调试信息. 


-dr 
RTL阶段后转储到`file.rtl'. 


-dx 
仅对函数生成RTL,而不是编译.通常和`r'联用. 


-dj 
第一次跳转优化后转储到`file.jump'. 


-ds 
CSE (包括有时候跟在CSE后面的跳转优化)后转储到`file.cse'. 


-dL 
循环优化后转储到`file.loop'. 


-dt 
第二次CSE处理(包括有时候跟在CSE后面的跳转优化)后转储到`file.cse2'. 


-df 
流程分析(flow analysis)后转储到`file.flow'. 


-dc 
指令组合(instruction combination)后转储到`file.combine'. 


-dS 
第一次指令安排(instruction schedule)后转储到`file.sched'. 


-dl 
局部寄存器分配后转储到`file.lreg'. 


-dg 
全局寄存器分配后转储到`file.greg'. 


-dR 
第二次指令安排(instruction schedule)后转储到`file.sched2'. 


-dJ 
最后一次跳转优化后转储到`file.jump2'. 


-dd 
推迟分支调度(delayed branch scheduling)后转储到`file.dbr'. 


-dk 
寄存器-堆栈转换后转储到`file.stack'. 


-da 
产生以上所有的转储. 


-dm 
运行结束后,在标准错误显示内存使用统计. 


-dp 
在汇编输出加注指明使用了哪些模式(pattern)及其替代模式. 


-fpretend-float 
交叉编译的时候,假定目标机和宿主机使用同样的浮点格式.它导致输出错误的浮点常数,但是在目标机上运行的时候, 真实的指令序列有可能和GNU CC希望的一样. 


-save-temps 
保存那些通常是``临时''的中间文件;置于当前目录下,并且根据源文件命名.因此,用`-c -save-temps'选项编译`foo.c '会生成` foo.cpp'和`foo.s' 以及`foo.o'文件. 


-print-file-name=library 
显示库文件library的全路径名,连接时会使用这个库---其他什么事情都不作.根据这个选项, GNU CC既不编译,也不连接,仅仅显示文件名. 


-print-libgcc-file-name 
和`-print-file-name=libgcc.a'一样. 


-print-prog-name=program 

类似于`-print-file-name',但是查找程序program如`cpp'. 


转自:http://wenku.baidu.com/view/cf52f6116c175f0e7cd137da.html###

你可能感兴趣的:(gcc调试选项)