您的位置:首页 > 其它

gcc和gdb使用手册

2012-01-02 16:56 399 查看




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
执行
条语句,将函数当成一条语句

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

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

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

ha信号 信号处理

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

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

信号处理可以取:

pass :程序能收到信号

ignore :程序收不到信号

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

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

5 通用命令

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

q 结束gdb。

shell 进入shell

e 退出shell,回到gdb
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: