4

#导入Word文档图片# Linux下GDB调试工具的运用

 1 year ago
source link: https://blog.51cto.com/u_11822586/5410210
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、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调试工具的运用_gcc编译器
  • 直接运行程序
    #导入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之后)。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK