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