{转}Linux下C开发之——gcc,gdb的使用

gcc编译器 前提编辑工具的使用:vi vim Emacs。 vi hello.c 一、常见步骤: 对于只有一个源文件的简单程序,常常只有编译,运行两步。 1,gcc hello.c -o hello 2,./hello 二、gcc编译流程 gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 hello.c (源码) hello.i 生成预处理文件, 参数是“-E”,把hello.c -> hello.i。完整命令为gcc hello.c -o hello.i -E hello.s 编译生成汇编文件, 参数是“-S”,把hello.i -> hello.s。完整命令为gcc hello.i -o hello.s -S hello.o 将汇编文件变为目标代码, 参数是“-c”,把hello.s -> hello.o。完整命令为gcc hello.s -o hello.o -c hello 链接目标代码,生成可执行程序, 参数无, 把hello.o -> hello。 完整命令为gcc hello.o -o hello ./hello (运行) 三、gcc的主要参数 1,总体参数 -E 只进行预编译,不做其他处理 -S 只是编译不汇编,生成汇编代码 -c 只是编译不链接,生成目标文件“.o” -o file 把输出文件输出到file里 -g 在可执行程序中包含标准调试信息 -v 打印出编译器内部编译各过程的命令行信息和编译器的版本 -I dir 在头文件的搜索路径列表中添加dir目录 -L dir 在库文件的搜索路径列表中添加dir目录 -static 链接静态库 -llibrary 连接名为library的库文件 2,警告和出错参数。 -w 关闭警告 -ansi 显示不符合ANSI C标准语法的警告信息 -pedantic -Wall 跟踪调试的有力工具,最后养成使用此参数的习惯。 3,优化参数。 通过参数“-On”来生成优化代码。其中n是一个代表优化级别的整数,较典型范围是从0到2或3.数字越大优化的等级越高,程序运行速度越快。常用-O2,因为它在优化长度,编译时间和代码大学之间取得一个比较理想的平衡点。比较:1-8.c(代码略) gcc 1-8.c -o 1-8 time ./1-8 gcc 1-8.c -o 1-8 -O2 time ./1-8 注:如下场合应避免优化代码。 (1)程序开发时。只有到软件发行或开发结束时,才考虑对最终生成的代码进行优化。 (2)资源受限时。如内存资源非常紧张时(一些实时嵌入式设备)。 (3)跟踪调试时。优化可能会删除、改写或重组代码,从而使跟踪调试变得异常困难。 gdb调试器 gdb调试的不是.c源文件而是可执行文件 1,编辑源文件。 例如,vi 1-9 添加如下内容 #include int min(int x, int y); int main() { int a1, a2, min_int; printf("please input the frist int number:\n"); scanf("%d", &a1); printf("please input the second int number:\n"); scanf("%d", &a2); min_int = min(a1, a2); printf("the min number is:%d\n", min_int); return 0; } int min(int x, int y) { if (x < y) return x; else return y; } 2,编译时要加上选项“-g”,这样编译出的可执行代码才包含调试信息。 gcc 1-9.c -o 1-9 -g 3,进入gdb调试环境。 gdb 1-9 回车就进入了gdb调试模式。在gdb的调试环境中,提示符是“(gdb)”。 4,用gdb调试程序。 (1)查看源文件 语法:'l'是list缩写。list<行号>|<函数名>。查看源代码,一次显示10行 命令 (gdb)l (2)设置断点 语法:break 行号|函数名<条件表达式> 本例可以输入命令 (gdb)b min 在自定义的min函数出设置断点。 (gdb)b 17 功能同上 (3)查看断点信息 语法:info break 命令 (gdb)info b (4)运行程序 语法:run 命令 (gdb)r 注:gdb默认从第一行开始运行,如果要从出现中指定行开始运行,只需输入“r”+行号。 (5)查看变量值 语法:p 变量名。程序运行到断点处会自动暂停,此时可查看指定变量的值。 本例命令 (gdb)p a1 (gdb)p a2 (gdb)p min_int 调试程序时,如需修改变量值,可在程序运行至断点处是,输入“set 变量=设定值”。 例,给变量“a2”赋值11,输入“set a2=11”。 (6)单步调试 语法: “n”(next),若有函数,不进入函数调用。 “s”(step),若有函数,则进入函数调用。 (7)继续运行程序 语法:continue 命令 (gdb)c (8)退出gdb调试环境。 语法:quit 命令 (gdb)q
原文地址:https://www.cnblogs.com/Cmpl/p/2100173.html