一、GCC编译器的常用选项

使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。

GCC最基本的用法∶ gcc [参数] [文件名称]

  • 常用的参数如下-c 只编译:不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
    -o output_filename:确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
    -g:产生符号调试工具(GNU的gdb)所必要的符号信息,要想对源代码进行调试,我们就必须加入这个选项。
    -O:对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。
    -O2:比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。
    -E:仅执行编译预处理;
    -S:将C代码转换为汇编代码;
    示例:

# gcc test.c -o app

  • 编译时指定库与头文件路径

-L:指定动态库路径。示例:gcc test.c -o app -L/usr/lib

-I:指定头文件存放的路径。示例:gcc test.c -o app -I/usr/include

-l: 指定库名称。示例:示例:gcc test.c -o app -lpthread

二、GDB调试工具

我们通常写C程序,会使用命令gcc test.c -o test,对源文件进行编译,但是如果我们要对程序进行调试,就必须在编译源文件时,使用-g参数,编译时使用的命令为:gcc -g test.c -o test

GDB工具也支持自动补全,比如: list命令可以简写l ,run命令可以简写r

2.1 GDB工具的基本使用

  • 编译支持GDB调试的程序:

[root@wbyq test]# gcc -g test.c -o test

  • 启用GDB调试:

[root@wbyq test]# gdb a.out

a.out 表示是要调试的可执行文件名称。

  • 进入调试界面的效果:#导入Word文档图片# Linux下GDB调试工具的运用_可执行文件
  • 直接运行程序#导入Word文档图片# Linux下GDB调试工具的运用_源文件_02
  • 退出调试界面(quit命令)

2.2 GDB工具常用的命令

注意没有输入新命令,敲回车GDB会再次执行上一条命令

查看gdb使用帮助

2.2.2 设置程序断点执行(breakpoints)

使用breakpoints (可简写为b)命令给程序添加断点,共有下面几种情况:

b <函数名> 在某函数入口处添加断点;

b <行号> 在指定行添加断点

b <文件名:行号> 在指定文件的指定行添加断点

b <行号 if 条件> 当条件为真时,指定行号处断点生效,例 b 5 if i=10 ,当i=10时,第5行断点生效

2.2.3 查看程序已经设置的断点(info break)

添加完断点之后,我们可以使用【info break】命令,查看所有的断点;

2.2.4 单步\连续支持程序

设置断点之后执行run命令开始运行程序;

输入next命令可实现单步运行

输入continue命令可实现连续运行;

如果想查看某一变量的值,则使用print/p + 变量名;

  • 注意事项:
  1. 执行run命令之前,必须设置断点,否则执行run之后程序就直接运行到结尾了。
  2. 执行单步运行、连续运行、打印指定变量值这些命令时,程序必须是运行状态(执行run之后)