gcc和gdb使用手册

本文详细介绍了GCC编译器的常用参数,如-c、-g、-include、-Idir等,以及GDB调试器的断点设置、数据查看和程序运行控制等基本操作,帮助开发者更好地理解和运用这两个工具。
摘要由CSDN通过智能技术生成


gcc常用参数

-c:到组译阶段停止,输出一个与源文件名相符的目标文件。

-Dmacro:相当于在程序中添加:#define macro 1

-Dmacro=defn:相当于在程序中添加:#define macro defn。

-g:将调试信息加入目标文件中,可以使用gdb调试器。

-include:编译器先处理该参数指定的文件,并将此文件经过预处理后,加入源文件内。

-Idir:设置搜索头文件的目录。在用#include “file”的时候,gcc/g++会先在当前目录查找头文件,如果没有找到,就到缺省的头文件目录找。如果使用-Idir,就会先在该目录中查找,然后再按常规的顺序查找。对于#include <file>,gcc/g++会先到-Idir指定的目录查找,如果没有不到,再将到缺省的头文件目录查找。

-l:指定链接时使用的库。(默认使用动态链接库)

-Ldir:设置链接时搜索库的路径。(默认使用动态链接库)

-M:生成文件关联的信息。

-MD:和-M相同,但把信息存放到.d的文件中。

-MM:,和-M相同,但忽略由#include<file>导致的依赖关系。

-MMD:和-MM相同,但把信息存放到.d的文件中。

-o:将生成的文件以指定的文件名保存,-o后面必须跟一个文件名。

-shared:生成一个可共享的目标文件,该目标文件可以和其它文件一起链接生成一个可执行文件。也可以用来生成动态库。

-static:此选项禁止使用动态库。

-Umacro:相当于在程序中添加:#undef macro。

-w:忽略所有警告信息。

-Wall:提供更多的警告信息。

-Wl,option:将option传递给链接器。

链接器的option包括:

-Bstatic:静态链接

-Bdynamic:动态链接


gcc参数

-C:通常预处理在处理源文件时,会将源文件中的注解删除。加上该参数后,不删除注解。该参数必须和-E参数一起使用。

-dD:列出所有宏定义的内容。

-dM:列出所有执行过的宏定义。

-E:将文件预处理后的结果显示到标准输出,但并不产生一个经过预处理的文件。可以将它重定向到一个输出文件里面。

-funsigned-char;-fno-signed-char;-fsigned-char;-fno-unsigned-char:对char类型进行设置,决定将char类型设置成unsignedchar(前两个参数)或者signedchar(后两个参数)。

-fthis-is-varialble:可以当一般变量使用this。

-ggdb:此选项将尽可能的生成gdb可以使用的调试信息。

-H:列出所有使用过的头文件及路径。

-imacrosfile:将file中定义的宏扩展到gcc的输入文件,但是宏定义本身并不出现在输入文件中。

-iprefixprefix;-iwithprefix dir:当-Idir的目录查找失败,会到prefix+dir下查找。

-nostdinc/ -nostdinc++:不在系统缺省的头文件目录里面查找头文件,一般和-I一起使用,明确限定头文件的位置。

-O-On:编译时进行优化处理。

-p:产生一个性能分析所需的信息,供prof使用。

-P:当编译器将预处理的结果显示到标准输出时,不加上头文件及函数所在的行号和路径说明等。必须和-E一起使用。

-pipe:一般在编译过程中,各阶段的处理器会产生一个处理后的暂时文件,并将此文件传给下一阶段的处理器。该参数就使用pipe代替这些临时文件,加快编译速度。

-pedantic:编译时将不符合ansi c的语法显示出来。

-pg:产生一个性能分析所需的信息,供gprof使用。

-S:到编译阶段停止,输出一个汇编语言码的文件。

-save-temps:保存临时文件,包括预处理过程产生的文件(.h),编译产生的文件(.s),组译产生的文件(.o),可执行文件等。

-Werror:将所有的警告信息改为错误信息。


1        断点指令

ib                                     断点信息

tb   行号                           设置第n行或指定函数为临时中断点

b    行号/函数名             设置第n行或指定函数为中断点

cl   行号/函数名             若不加参数,则会删除当前行的中断点

d    断点编号                  若没有参数,则会删除所有中断点

dis 断点编号                  若没有参数,则会使所有中断点都失效

en  断点编号                  若没有参数,则会使所有中断点都生效

ig   断点编号    忽略的次数

b    行号/函数名if  条件表达式

cond     断点编号    条件表达式

comm   断点编号           设置在遇到断点之后要执行的命令

 

aw观察点表达式         当表达式的值发生改变或当表达式的值被读取时,程序都会中断。

只有对程序设置了断点,并运行程序之后,才能设置观察点。

wa观察点表达式         当表达式的值发生改变时,程序中断。

只有对程序设置了断点,并运行程序之后,才能设置观察点。


2        数据指令

idis                                  显示表达式信息。

只有对程序设置了断点,并运行程序之后,才能设置表达式。

disp      表达式               当运行到断点处会显示该表达式的值

d    dis  表达式编号              若没有参数,则删除所有表达式

dis dis  表达式编号              若没有参数,则会使所有表达式都失效

en  dis  表达式编号              若没有参数,则会使所有表达式都生效

 

p    表达式                      显示表达式的值

p    变量=表达式            对变量进行赋值

p    表达式@数组大小  打印内存中某段空间的内容。以数组的形式输出结果。

数组中的第0个元素就是表达式的值,

数组中的第1个元素就是在内存中存放在表达式之后的值,等等。

注意打印的空间大小为:表达式占据的内存空间×数组大小

what表达式                  显示表达式的类型

 

s     变量=表达式            对变量进行赋值


3        文件指令

dir 目录                    向源文件搜索路径中增加一个目录。

 

l     n1,n2

l     行号/函数名

l     文件名:行号/函数名

 

for/sea         字符串               从当前行向后查找字符串,查找到的行号保存在变量“$_”中,

可以用“p $_”来查看。

reverse-sea字符串               从当前行向前查找字符串,查找到的行号保存在“$_”变量中,

可以用“p $_”来查看。


4        程序运行

r                         运行程序

k                         终止程序

c                         继续运行

cN                            第N次运行到该断点时才会再次中断。

 

j     行号             跳转执行到指定行

n    [N]                执行[N]条语句,将函数当成一条语句

ni   [N]                执行[N]条指令,跟踪到函数内部执行指令

s     [N]                执行[N]条语句,跟踪到函数内部执行语句

si    [N]                执行[N]条指令,跟踪到函数内部执行指令

 

ha信号 信号处理

信号可以用符号表示,也可以用数字表示。如果信号用数字表示,数字的取值范围是1~15,而且可以指定信号范围:n1-n2。

如果信号是all,表示要处理所有的信号,除了SIGTRAP和SIGINT。

信号处理可以取:

pass      :程序能收到信号

ignore   :程序收不到信号

stop      :如果信号发生,就中断并打印提示信息

print      :如果信号发生,就打印提示信息


5        通用命令

h                  列出gdb的所有操作命令。

q                  结束gdb。

shell             进入shell

e                  退出shell,回到gdb


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值