GCC
- 参数
-o:指定生成的输出文件;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-Wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。
-I:指定文件路径
GCC的编译流程分为四个步骤:
1. 预处理(Pre-processing)
2. 编译(Compiling)
3. 汇编(Assembling)
4. 链接(Linking)
eg:
//test.c
#include <stdio.h>
#include <math.h>
#define N 25
int main(int argc,const char *argv[]){
double n;
n = sqrt(N);
printf("debug:n=%lf\n",n);
return 0;
}
一,预处理:编辑器先将源代码*.c文件通过预处理器预处理(Pre-processing)为预处理文件*.i
gcc -E test.c -o test.i
cat test.i
二,编译:预处理文件*.i再通过编译器编译(Compiling)为汇编文件*.s
gcc -S test.i -o test.s
cat test.s
三,汇编:汇编文件*.s再通过汇编(Assembling)处理理为二进制目标文件*.o
gcc -c test.s -o test.o
cat test.o
四,链接:汇编文件*.o再通过链接(Linking)成可执行文件*.exe
gcc test.o -o test -lm
./test
GDB
使用GDB调试程序时,需要先用gcc对test.c进行编译(注:一定要加上选项-g)
gcc -g test.c -o test
gdb test
查看文件 : -(gdb)l
设置断点: -(gdb)b num //行数
查看断点情况: -(gdb)info b
运行代码: -(gdb)r
查看变量值: -(gdb)p x //变量名
单步运行: -(gdb)n //不可进入函数内部
-(gdb)s //可进入函数内部
恢复程序运行: -(gdb)c
运行带参数代码: -(gdb)set args xx yy //参数
帮助:-(gdb)help [command]