linux下编译器gcc和调试器gdb的使用

时间:2022-12-10 08:14:32

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:显示当前函数中的局部变量信息。