【复习】Linux中C的编译和调试

发布于 2021-05-26  474 次阅读


文章目录[隐藏]

WIN的二进制可执行文件与Linux不相通,需要重新编译

GCC

GCC将源码程序转变为可执行程序的过程分为4个相互关联的步骤:
1.预处理(预编译)
2.编译
3.汇编
4.链接
GCC首先调用cpp进行预处理,对源代码文件的include\define进行宏替换处理
接着调用ccl进行编译,生成以.o为后缀的目标文件;
汇编过程是针对源代码中汇编语言代码的步骤,调用as将以.S和.s后缀的汇编语言源代码文件进行汇编后生成.o为后缀的目标文件;
当所有的目标文件都生成以后,GCC就调用ld来完成链接
//GCC通过文件名后缀来区分文件
.c      C语言源程序文件
.a      由目标文件构成的档案库文件
.C或.cc或.cxx     c++源程序文件
.h      头文件
.i      已预处理过的C源程序文件
.ii     已经与预处理过的C++源程序文件
.m      ObjectC源程序文件
.o      编译后的目标文件
.s      汇编语言源程序文件
.S      已经预处理过的汇编语言源程序文件

GCC的使用

-c  编译生成为.o为后缀的目标文件
-o  该参数后面要更生成的可执行文件的名称
-g  生成调试工具(GUN的GDB)所需要的符号信息
-O  对编译\链接过程进行优化
-O2 比上面更好的优化,速度慢
-E  仅做预处理,处理结果再显示器输出
-M  输出文件之间的依赖关系
-MM 输出文件之间的依赖关系,但是不包括头文件
-S  编译到汇编语言
-Wall   编译时显示警告信息
...

GDB

GDB是GUN发布的一个功能强大的调试工具.
源程序在用GCC编译时如果加上参数"-g",生成的可执行文件就可以使用GDB进行调试测试.
GDB在调试执行某个程序时,可以设置多个断电,当程序执行到断点处,便会自动停下来,显示将要执行的语句编号和语句,用户此时可以通过显示指定变量的值\改变指定变量的值\调试执行指定函数等手段观察执行过程中变量的变化情况.然后选择程序继续执行到下一个断点处,也可以逐条语句执行.调试执行过程中,可以改变程序中断点的设置.
gcc -g xx.c
gdb xx.out

即可


擦肩而过的概率