GDB是什么?

gdb是在Linux的控制台窗口下的一个调试工具,功能十分强大,今天些简单的学习一下关于gdb的基本使用

gdb的基本使用

首先,用gcc编译程序时需要加上-g参数以便获取调试信息

首先要使用gdb调试程序,在用gcc编译时要加上-g参数,否则gdb会提示缺少调试信息。如下图: 在这里插入图片描述

因此,需要使用如下方法编译程序:

1
gcc -g test.c -o test

即加上gcc的-g参数。

接下来,进入gdb调试

使用如下命令进入gdb以便调试相关程序,有两种方式: 直接gdb 加上要调试的程序名 在这里插入图片描述 或者先进入gdb工具,之后再gdb中通过file ./文件名的方式打开要调试的程序。在这里插入图片描述

最后,通过gdb的相关命令进行单步调试程序

先放上本次将要介绍的几个关键字,后面进行具体解释。 在这里插入图片描述

start:如其字面意思一样,开始程序的调试,输入start程序将会从main函数中的第一句开始执行,并停在此处。如图: 在这里插入图片描述 l :即list的意思,列出当前上下5行的代码以便查看。如图: 在这里插入图片描述 n :Next,下一步(不进入函数),即顺序执行一条语句,若遇到函数将直接执行完整个函数,而不是进入函数内部。后面可以加上需要执行n的次数。

s :Step,同样是顺序执行语句,但和n区别是,若遇到函数将进入函数内部,进一步执行函数内部的每一条语句。同样,数字参数可以控制执行多少次s命令。

until n :n代表行号(或其他位置信息),即运行程序到第n行。

还可以添加相应位置的断点,以便快速运行到断点位置 b 文件名:行号(或函数):Breakpoint,b 后加上要添加断点的文件名和行号,就可以在相应位置上添加断点,可以使用b i查看当前所添加的所有断点,即breakpoint info。b命令还可以添加其他参数,例如指定线程的编号,添加条件判断等,这里不做过多介绍 完整使用方法如下

1
break [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]

r :Run,使用r命令可以直接让程序顺序运行,直到遇到断点或者程序结束。

在遇到需要查看相关变量的信息时,可以使用p命令 p v:Print value,v代表想要查看的变量名,gdb将会返回相应变量的值并输出到标准输出设备上。

d:Delete,使用d可以删除全部断点,d 加上相应断点的编号可单独删除某断点。

bt: Backtrace,该命令可以查看函数栈。、

c:Continue,继续运行程序,当程序运行到断点处时,可以继续运行程序,而不是使用run重新运行程序。

watch v: v代表变量名,当变量中的值发生变化时,程序运行停止。

总结

以上就是gdb工具的简单使用。当然,这只是gdb工具的冰山一角,我们可以通过help all查看全部的指令,发现其功能还有很多。 若遇到不会的指令,还可以使用help command来查看帮助信息。

附:最常用的gdb指令的简单英文介绍(来自gdb-Red Hat Enterprise Linux 7.6.1-110.2018-04-11中的gdb帮助手册)在这里插入图片描述