摘自《Linux程序设计》第四版,人民邮电出版社
c语言程序的编译与调试
<<使用gcc编译,gdb调试>>
程序编译过程:
词法分析-->语法分析-->中间代码生成-->代码优化-->目标代码生成
gcc编译器:
预处理(preprocessing)-->编译(compilation)-->汇编(assembly)-->连接(link)
文件后缀名说明:
.c:c语言代码
.a:由目标文件构成的库文件
.C,.cc,.cpp:C++代码
.h:程序所包含的头文件
.i:已经预处理过c源文件,一般为中间代码文件
.ii:经过预处理过的C++源文件
.o:编译后的目标文件,源文件生成的中间目标文件
.s:汇编语言的源代码
.S:经过与编译汇编源代码
.O:编译以后的程序目标文件,目标文件经过连接成的执行文件
gcc:编译程序
-o:指定编译输出文件(默认输出到当前文件夹a.out)
gcc a.c -o test.out
-v:查看程序编译过程和显示已经调用的库
gcc -v a.c
-x:指定编译语言(用在编译器不能识别的扩展名)
gcc -x 'c' a.u
-asci:指定编译程序使用ansic标准
-E:只进行完预编译(.cxx)
-S:只进行到生成汇编文件(.s)
-c:只生成目录代码,不生成可执行程序(.o)
-g:使用gdb调试程序,配合-o输出xxx.debug文件
编译过程控制:
-E -S -c
源文件--->预处理文件--->汇编文件--->目标文件--->可执行文件
gdb:调试程序
gdb:启动调试环境
file xxx.debug:加载调试文件
list n:从n开始显示十行
break n:在n行添加断点
info breakpoint [n]:查看程序中设置的断点/查看n个断点
next:程序运行到下一行停下
continue:程序会运行到下一个断点停下
step:一行一行运行(同next),只是step可以到调用函数内部
print:输出变量当前值
delete n:删除n个断点
q:退出环境