gdb是Linux 下功能全面的调试工具。gdb支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在Linux环境软件开发中,gdb 是主要的调试工具,用来调试 C 和 C++ 程序。
👀 1.安装gdb
直接在命令行输入:sudo yum install -y gdb
即可直接安装成功。
👀2.判断是否安装成功
安装成功后,在命令行直接输入 gdb 或者 gdb --version 进入交互模式。
如图所示:
当我们进入交互模式后发现无论我们输入什么命令都没有作用(无法调试),只会出现这样的情况:
"/home/bsk/test1/one/test.c": not in executable format: File format not recognized
(gdb) l
No symbol table is loaded. Use the "file" command.
哪为什么会这样呢?原因很简单,因为gdb在linux中默认是以release版(一般软件进行发布,用户体验模式)的方式来进行发布的,不可以被调试!所以我们要把它改成debug方式(包含调试信息)发布。
👀3.改成debug方式发布。
在命令行输入:vim Makefile(自动化构建工具(多文件操作))
进入之后写如下代码,其中的 -g选项就是把其改成debug方式。
1 mytest:test.c
2 gcc $^ -o $@ -g
3
4 .PHONY:clean
5 clean:
6 rm -f mytest
7
现在再make一下就会生成对应的mytest(debug版)
以上是详细内容,方便从根上理解。
而我们在日常使用时直接在 gcc命令下添加 -g 选项即可,再直接gdb就可。如下图所示:
👀 4.gdb功能简介
接下来就可以进行gdb使用了,简单介绍其几个功能如下:
l:显示代码(l+数字:可以从你输入的数字开始显示,但会出现和其相关的上下文)
(gdb) l
1 #include <stdio.h>
2 int main()
3 {
4 printf("long time no see\n");
5 fflush(stdout);
6 sleep(2);
7 return 0;
8 }
(gdb)
b+行号:打断点
(gdb) b 5
Breakpoint 1 at 0x40060b: file test.c, line 5.
(gdb)
info b :查看断点编号信息(如下所示)
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040060b in main at test.c:5
breakpoint already hit 1 time
2 breakpoint keep y 0x0000000000400601 in main at test.c:2
(gdb)
d+编号:删除断点(不要输入以前打断点的行号,要输入查看断点信息里面的对应的Num号)
(gdb) d 1
(gdb) info b
Num Type Disp Enb Address What
2 breakpoint keep y 0x0000000000400601 in main at test.c:2
(gdb)
r :运行程序(遇到断点会停下来,没有断点直接运行到最后)
(gdb) r
Starting program: /home/bsk/test1/one/a.out
long time no see
Breakpoint 1, main () at test.c:5
5 fflush(stdout);
Missing separate debuginfos, use: debuginfo-install glibc-2.17-317.el7.x86_64
(gdb)
在第5行停了下来。(最后一行提示缺少一个工具,复制安装就可以,或者不用管)
n:单步执行语句(对应vs逐过程,不进入函数内部)
(gdb) n
6 sleep(2);
(gdb)
finish :结束函数调用,然后停下来。
s:进入函数内部(对应vs逐语句)
until +行数:跳转到指定行
display +名称:常显示(对应vs中的监视)
undisplay +编号:取消常显示(监视)