linux下学习C语言的两大强大工具,gcc、gdb
一、gcc的使用
C语言编译过程
1.预处理:宏定义展开,头文件展开,条件编译等,同时将代码中的注释删除
2.编译 :检测语法,将预处理后的文件编译生成汇编文件
3.汇编:将汇编文件生成目标文件(二进制文件)
4.连接:C语言写的程序需要依赖各种库,编译之后还需把库链接到最终的可执行程序中去
.c C语言文件
.i 预处理后的文件
.s 汇编文件
.o目标文件
C语言编译各阶段命令
gcc -E filename.c -o filename.i
gcc -S filename.c -o filename.s
gcc -c filename.c -o filename.o
要生成可执行文件为
gcc filename.c -o filename
gcc扩展
gcc可以对多种语言编写的代码进性编译,如果源代码文件扩展名不是默认扩展名,编译器就无法编译这个文件,这时候需要对文件进性操作,可以使用-x选项来设置程序语言
比如先复制一份c程序
cp file0.c file0.u
复制的文件扩展名被更改了
这时候编译这个程序是不能被gcc识别的,因此需要使用-x参数来设置编译语言,命令如下
gcc -x 'c' file0.u
一些其他比较有用的选项
-Wall 生成所有警告信息
-w 不生成警告信息
-Werror 将所有警告转化成错误信息并显示出来
-g 包含调试信息
-I 指定头文件目录路径
-L 指定库文件目录路径
-v 打印出编译过程中的命令行和编译器版本等信息
-O/O0 关闭优化等级
-O1 最基本的优化等级
-O2 更好的优化等级,推荐使用,编译器尝试提高代码性能但是又不会过于增加体积和编译时间
-O3最高优化等级
gdb的使用
gdb是linux下常用的程序调试工具,用于调试c和c++
gdb使用操作可分为
启动程序,设置断点,查看信息,分布运行,改变环境
为了可使用gdb调试,需要在编译的时候加入调试信息
命令如下
gcc -g wenjian.c -o wenjian.debug
编译成功后启动gdb
输入以下命令显示10行代码,按enter建显示接下来的10行代码
list l
run:运行程序
next:运行到下一行停止
continue:运行到下一个断点停止运行
step:运行到函数的内部
finish:退出已进入的函数
print 变量:使用以下命令查看变量数值
display 变量:查看变量的数值
set 变量:设置变量的数值
break n:对第n行加入断点
info breakpoint :输入下列命令查看所有已经设置的断点
delete b n:删除第n个断点
disable b n:禁用第个断点
enable b n:启用第n个断点
clear n:清除某处所有的断点
完成调试后,输入q退出调试