Linux调试器gdb

一.准备工作

我们先写一段代码进行调试,因为gdb是调试器,所以必须在debug版本下才能使用,在编译代码时需要加上-g。

创建一个makefile文件

在这里插入图片描述

写一段用于调试的代码

在这里插入图片描述

编译

在这里插入图片描述

二.调试

1.进入和退出(q)

进入调试

在这里插入图片描述

退出调试

在这里插入图片描述

2.显示代码(l)

在这里插入图片描述

但这里并不是从第一行开始显示的,如果我们需要可以在后面加数字,指定它从多少行开始显示。

在这里插入图片描述

可以看到它只显示10行代码,如果想看到完整的,可以继续l 1,当然由于gdb会记住上一条指令,所以也可以直接回车。

在这里插入图片描述

当然也可以看某一个函数。

在这里插入图片描述

3.运行®和断点(d)

直接运行

在这里插入图片描述

直接使用r是一次运行完,很明显不符合调试的目的。我们需要断点,最常用的就是d+行号。

在这里插入图片描述

打完断点后,Linux并不像VS上有红色的点,所以如果我们想要查看断点,还需要使用info b。

在这里插入图片描述

Num代表编号,End代表是否开启,Address是地址,what是断点位置。

删除断点(按编号)

在这里插入图片描述

让断点失效

在这里插入图片描述

再打开断点

在这里插入图片描述

4.逐过程(n)和逐语句(s)

在VS里我们按F10就是逐过程,按F11就是逐语句。两者的区别就是逐过程不会进入函数内部,而逐语句会。

打上断点,开始运行

在这里插入图片描述

我们使用next(n)就是逐过程,可以不进入函数内部。

在这里插入图片描述

我们使用steo(s)就是逐语句,进入函数内部。

在这里插入图片描述

5.查看变量和地址

在这里插入图片描述

但是这个P有一个弊端就是只显示一次,当代码继续运行时,必须不断使用P。为了变量常显示,我们可以使用display。它可以自动刷新。

在这里插入图片描述

取消display(按编号)

在这里插入图片描述

6.跳出循环(until)和直接结束函数(finish)

在上面的函数里有100次循环,很明显我们不可能按100次n,为了能直接跳出来,我们可以使用until。

在这里插入图片描述

现在我们已经进入到函数里了,我想要直接得到结果而不是一步一步按下去,那么我们可以使用finish直接完成当前函数。

在这里插入图片描述

7.从一个断点到另一个断点©

为了迅速找到错误代码位置,我们可以多个断点,然后再断点之间运行,就可以很快判断出代码错误再哪两个断点之间了。

在这里插入图片描述

三.其他指令

在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_73790767/article/details/131673013