使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最普遍的编译器,具备功能强大,编译代码支持性能优化等特色。
选项: -c:仅执行编译操做,不进行链接操做; -o:指定生成的输出文件; -wall:显示警告信息; -E:仅执行编译预处理; -S:将C代码转换为汇编代码; -g: 在编译时产生调试信息,使用gdb工具时使用。c++
实例: 假设源程序文件名为test.c性能优化
1. 预处理,.c文件 -> .i文件。 gcc -E test.c -o test.i
函数
2. 编译,.i文件 -> .s文件。 gcc -S test.i -o test.s
将预处理过程生成的.i后缀的文件转化成汇编文件,里面存储的是相应的汇编代码,这个过程叫作编译。工具
3. 汇编,.s文件 -> .o文件。 gcc -c test.s -o test.o
将汇编文件中的汇编代码翻译成相应的机器语言,这个过程叫作汇编。性能
4. 连接, .o文件 - 可执行程序 gcc test.o -o test
完成连接这个过程,它经过连接器ld将运行程序的目标文件和库文件连接在一块儿,生成最后的可执行文件优化
若是有多个源文件,基本上有两种编译方法,假设有两个源文件为test.c和testfun.c: 1). 多个文件一块儿编译 用法:# gcc testfun.c test.c -o test 做用:将testfun.c和test.c分别编译后连接成test可执行文件。ui
2). 分别编译各个源文件,以后对编译后输出的目标文件连接。 用法: gcc -c testfun.c //将testfun.c编译成testfun.o gcc -c test.c //将test.c编译成test.o gcc -o testfun.o test.o -o test //将testfun.o和test.o连接成testspa
gdb命令包含在GNU的gcc开发套件中,是功能强大的程序调试器。GDB中的命令当然不少,但咱们只需掌握其中十个左右的命令,就大体能够完成平常的基本的程序调试工做。开放源代码
命令 | 解释 | 示例 |
---|---|---|
file <文件名> | 加载被调试的可执行程序文件。由于通常都在被调试程序所在目录下执行GDB,于是文本名不须要带路径。 | (gdb) file gdb-sample |
r | Run的简写,运行被调试的程序。若是此前没有下过断点,则执行完整个程序;若是有断点,则程序暂停在第一个可用断点处。 | (gdb) r |
c | Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 | (gdb) c |
b <行号> <br> b <函数名称> <br> b *<函数名称> <br> b *<代码地址> <br> d [编号] | b: Breakpoint的简写,设置断点。两可使用“行号”“函数名称”“执行地址”等方式指定断点位置。 <br> 其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。若是不了解汇编,能够不予理会此用法。<br> d: Delete breakpoint的简写,删除指定编号的某个断点,或删除全部断点。断点编号从1开始递增。 | (gdb) b 8 <br> (gdb) b main <br> (gdb) b *main <br> (gdb) b *0x804835c <br> (gdb) d |
s, n | s: 执行一行源程序代码,若是此行代码中有函数调用,则进入该函数; <br> n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 <br> s 至关于其它调试器中的“Step Into (单步跟踪进入)”;n 至关于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的状况下才可使用(GCC编译时使用“-g”参数)。 | (gdb) s <br> (gdb) n |
p <变量名称> | Print的简写,显示指定变量(临时变量或全局变量)的值。 | (gdb) p i <br> (gdb) p nGlobalVar |
q | Quit的简写,退出GDB调试环境。 | (gdb) q |
选项: -cd:设置工做目录; -q:安静模式,不打印介绍信息和版本信息; -d:添加文件查找路径; -x:从指定文件中执行GDB指令; -s:设置读取的符号表文件。翻译
文件: 二进制可执行文件。