1 gcc的使用
gcc是linux下通用的C程序编译器,具有非常强大的程序编译功能。
1.1 gcc对源程序扩展名的支持
.c为C语言源代码文件
.a是由目标文件构成的库文件
.C、.cc或、.cpp标识为C++源文件
.h是程序包含的头文件
.i标识文件是已经与处理过的C源代码文件,一般为中间代码文件
.ii是已经处理过的C++源代码文件,一般为中间代码文件
.o是编译后的目标文件,源文件生成的中间目标文件
.s是汇编语言源代码文件
.S是经过预编译的汇编语言源代码文件
.O是编译以后的程序目标文件,目标文件经过连接成可执行文件
1.2 gcc编译程序
gcc在编译程序时有很多可选参数,可以输入gcc –help查看gcc的这些可选参数。最简单情况下:
gcc a.c会在同目录下生成a.out文件,./a.out可运行这个程序。
参数-o加文件名可设置输出的文件,参数-v可查看程序的编译过程和系那是已经调用的库,参数-x可设置编译的语言,如果扩展名不正确时,可使用gcc –x ‘c’ a.u进行编译,可以用-ansic来设置程序使用ANSIC标准。
编译C++程序使用g++,参数与gcc命令基本相同。
1.3 编译过程的控制
编译程序会自动完成预处理、编译、汇编和链接四个步骤,(1)使用-E可以完成程序的预处理,如gcc –E –o a.cxx a.c,(2)使用-S可在编译时之生成相应的汇编程序文件,如gcc –S –o a.s a.c,(3)使用-c可以只生成目录嗲吗而不生成可执行程序,如gcc –c –o a.0 a.c,(4)gcc可以把上一步骤生成的目录代码文件生成一个可执行文件,如gcc a.o –o aa.out。
2 gdb调试程序
gdb主要进行下面几个方面的操作,包括启动程序、设置断点、查看信息、分布运行和改变环境。
2.1在程序中加入调试信息
在编译程序时使用-g参数,gcc –g –o a.debuga.c,这时候生成一个a.debug的可执行程序,以供调试使用。
2.2启动gdb
在终端中输入gdb即可启动gdb.
2.3加载需要调试的程序
使用gdb调试一个程序之前,需要加载这个程序,加载程序的命令式file,如file a.debug。
2.4查看代码
a.debug程序中自动加入了断点,使用list命令显示程序的源代码和断点,如list 1。
2.5 在程序中加入断点
当需要在程序的第六行增加一个断点时,可输入一下命令,break 6。
2.6查看断点
命令“infobreakpoint”可以查看程序中设置的断点,加入相应的断点编号,可以查看其中一个断点的信息,如info breakpoint 2。
2.7 运行程序
Run命令运行程序,next会在下一行停下,continue会在下一个断点的位置停下,step实现对程序的单步运行
2.8 变量的查看
print命令可实现对变量的查看,如printi。
2.9 使用gdb帮助
在gdb中输入help命令,可显示帮助信息,helpall可显示所有帮助信息。
2.10 gdb常用命令
breaktrace:显示程序中的当前位置和表示如何到达当前位置的栈跟踪。
breakpoint:在程序中设置一个断点。
cd:改变当前工作目录。
clear:删除刚才停止处的断点。
commands:命中断点时,列出将要执行的命令。
continue:从断点开始继续执行。
delete:删除一个断点或监测点。
display:程序停止时显示变量和表达式。
down:下移栈帧,使得另一个函数成为当前函数。
frame:选择吓一跳continue命令的帧
info:显示与该程序有关的各种信息。
infobreak:显示当前断点清单,包括到达断点处的次数。
infofiles:显示被调试文件的详细信息。
infofunc:显示所有的函数名称。
Infolocal:显示当前函数中的局部变量信息。