gcc是编程语言编译器。可以编译c,c++,java,,,
首先:
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件
转载
gcc编译器的使用
选项 | 含义 |
---|---|
-o | 预处理、汇编、编译并链接形成可执行文件,用来指定输出文件的文件名 |
-c | 将汇编输出文件编译输出.o编译后的目标文件 |
-E | 将.c预处理输出.i的预编译文件 |
-S | 将预处理输出.i预编译文件。汇编成.s汇编语言源代码文件 |
-O | 使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长 |
-Wall | 编译程序,同时开启警告信息 |
下面是我编译的f1.c文件,通过gcc将其最终编译为可执行文件f1
所以呢,先-E成.i文件,再-S成.s文件,再-c成.o文件,再链接成可执行文件
作为一个小白级别的懒人,觉得这个好麻烦啊~~,所以嘞,下面的方法真是懒人必备,同样的功能,但是省去了很多步骤哦。
gcc f1.c -o f1
./f1
gdb调试器的使用
gdb调试可以找到程序中的错误,调试工具为gdb。
选项 | 功能 |
---|---|
file | 装入调试的可执行文件 |
break | 设置断点 |
list | 列出产生执行文件的代码源部分 |
run | 执行当前被调试的程序 |
set | 设置变量值 |
显示变量或表达式值 | |
quit | 退出gdb |
c | 继续break后的执行 |
bt | 反向追踪,显示程序堆栈 |
shell | 在gdb内部执行shell命令 |
make | 不退出gdb,重新产生可执行文件 |
where | 显示程序当前的调用栈 |
step | 执行一行代码源,但不进入程序内部 |
如果你要使用gdb调试器,那么在gcc的时候,需要加上-g选项
gcc -g f1.c -o f1
常见命令用法
- list显示命令,显示多行源代码,从上次的位置开始显示,默认情况下,一次显示10行,第一次使用时,从代码起始位置显示
list n显示以第n行未中心的10行代码 - break断点命令
break n,在第n行停止程序执行,进而执行相应的操作
指令 | 含义 |
---|---|
info break | 查看断点相关的信息 |
delete breakpoint_num | 根据断电号,删除断点 |
clear n | 表示清除第n行的断点 |
- display命令,查看参数的值
display var_name //显示变量var_name的值
- watch命令,可设置观察点(watchpoint)。使用观察点可以使得当某表达式的值发生变化时,程序暂停执行。
执行该命令前,必须保证程序已经运行
- step及next命令
step可使得程序逐条执行,即执行完一条语句,然后,在下一条语句前停下来,等待用户的命令。
一般使用step命令时,可使用display或者watch命令查看变量的变化,从而判断程序行为是否符合要求。当下一条指令为函数时,s进入函数内部,在其第一条语句前停下来。
step n,next n 表示连续但不执行n条指令,如果期间遇到断点,则停下来
- print命令,print var
- set var_name=value ,在程序运行中动态改变变量的值
小技巧
- 使用where命令可以帮助我们将错误定位
- 当使用set命令调试时,需要保证,set命令的位置在断点语句之前
譬如,当where显示我们的错误处在第7行,我们执行break 7,查看变量值发现,变量需要重新赋值,于是乎,想当然的在这里进行变量set命令,但但但,在这里请stop,由于set语句是在断点语句后进行的更改,而我们需要在错误前就杜绝了它的根呀,所以嘞,可以重设break,或者再设一个断点,再set命令,就ok啦!