Skip to content

GCC和GDB命令使用详解

· 8 min · Linux / GCC / GDB / 调试 / 学习笔记

一、GCC介绍#

GCC是Linux平台默认的编译器,全称是GNU Compiler Collection。GCC是GNU项目开发的编译器合集,包含了多种不同语言的编译器前端还有汇编器、链接器等等,能够编译C、Cpp、Objective-C,Fortran、Ada、GoOpenCL等等语言。GCC本身有多个平台的版本,并且可以编译出多个平台和操作系统的可执行文件。GCC还有交叉编译工具链可以用来编译其他平台的可执行文件。

其中编译C语言的编译器叫做gcc,编译Cpp的叫做g++。

一般来说GCC是默认安装在Linux系统的。如果需要安装GCC的交叉编译工具链,可以使用包管理器或者直接下载二进制文件进行编译。

二、gcc的基本使用#

1、编译程序的基本过程#

编译一个程序大致分为以下几个过程:

2、gcc在每个阶段的行为#

以上的每个命令都可以单独对源文件进行使用。

并且在整个编译的过程中,任何一步得到的文件,都可以使用下一步的命令进行处理。

例如gcc -c test1.i test2.c,该命令会将一个**.i文件和一个.c文件直接变成.s**汇编文件。

3、编译优化选项#

在这里只介绍基本的优化等级,更多细分的优化选项,以及在链接阶段开启的链接时优化,会在另一篇文章中详细说明。

4、编译生成库和链接库#

关于可执行文件和库文件,在另一篇文章中详细说明。

要使用目标文件打包成静态库需要使用ar工具而不是gcc。

5、其他的一些#

生成调试信息时可以使用调试等级,来生成更多更详细的优化信息,例如-ggdb3。

使用GCC标准构建流程#

这里尝试编写一个CmakeLists.txt进行项目的构建,需要的编译器选项有

三、GDB介绍#

GDB是GNU项目中的调试工具,一般和GCC配套使用,是Linux系统的标准调试工具。

1、调试信息格式#

目前一个程序调试信息的表示格式是DWARF,在对源代码进行编译时,不管使用哪种编译工具,不管是交叉编译还是本地编译,都可以加上生成调试信息的选项,最后DWARF信息将被嵌入到可执行文件中。

对嵌入式平台来说,最终烧录的文件并不会有调试信息,而是在编译过程中生成一个有调试信息和ELF格式的文件和另一个用来烧录bin文件,IDE可以使用调试文件以及调试器和嵌入式平台进行交互调试。

对主流的编译器来说,生成的调试信息格式都是DWARF,不同的编译器生成相同格式的调试信息,不同的调试器都可以使用这同一种格式的调试信息。

2、GDB基本使用#

1、调试器使用前提#

要使用GDB或者其他的调试器,首先要在编译时期加上-g选项来生成调试信息,也可以适当的降低优化等级,减少编译器对源代码的优化。

在安装了GDB的机器上,使用gdb program,就可以开始调试了,其中Program就是要调试的程序。

2、调试器的使用#

启动GDB之后,进入到和GDB交互的命令行中。