【Linux】-关于调试器gdb的介绍和使用

作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
在这里插入图片描述
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录

  • 前言
  • 一、Linux中的debug和release
  • 二、gdb的使用
    • ==**1.进入调试**==
    • ==**2.显示代码**==
    • ==**3.执行和断点**==
    • ==**4.逐语句和逐过程**==
    • ==**5.显示变量**==
    • ==6.断点之间的执行==
    • ==7.启动断点和禁用断点==
  • 三、总结


前言

这篇讲给大家介绍关于Linux中的调试,它和vs的操作思想是一样的,帮助我们调试代码,所以关于一些调试名词的大家是知道的,这篇的指令选项特别多,大家下来要好好练习,不然很容易忘,在vs讲调试之前,我们也介绍过关于debug和release的介绍,在Linux上也有着两个版本,我们话不多说,开始进入正文


一、Linux中的debug和release

在Linux上,我们gcc/g++默认生成的是动态的release版本的可执行程序,我们使用 -g 选项就可以使可执行程序变成debug版本的,这样才有调试信息。
【Linux】-关于调试器gdb的介绍和使用_第1张图片

我们看到debug版本的可执行程序比release版本的体积要大些,因为增加了调试信息。

我们来使用一个readelf指令来看看生成的文件是否有debug调试信息
【Linux】-关于调试器gdb的介绍和使用_第2张图片
我们在平时写代码的时候加一个-g生成debug版本才能进行调试。这篇我的可执行程序都是debug版本的。接下来开始正式介绍gdb调试器

二、gdb的使用

在讲解这个之前,我希望大家看看我之前这篇博客写关于vs上的调试vs上的调试技巧,接下来的一些名词我就不具体给大家介绍了,我对标vs上的调试给大家讲解,接下来我们先把准备工作做好。写一个程序,把自动化构建写好,在vs上准备一份相同的代码,方便做对比:
【Linux】-关于调试器gdb的介绍和使用_第3张图片

1.进入调试

gdb+可执行程序

【Linux】-关于调试器gdb的介绍和使用_第4张图片

此时你就进入调试,相当于vs的CTRL+F10

2.显示代码

我们进入调试之后,是看不见代码的,所以我们要将其显示出来,使用l指令
【Linux】-关于调试器gdb的介绍和使用_第5张图片

l默认从随机位置开始每次显示10行直到显示结束,想要从第一行开始展示输入指令l 0从第一行开始显示:
【Linux】-关于调试器gdb的介绍和使用_第6张图片

注意:gdb会记录上一条的命令,如果你下一条想要执行相同的命令,就可以直接回车就好了

3.执行和断点

断点是我们调试一个重点的东西,它可以不让我们从第一行开始调试,直接跳到想要行开始调试。
(1) 设置断点b+行号
【Linux】-关于调试器gdb的介绍和使用_第7张图片
(2)显示断点info b
【Linux】-关于调试器gdb的介绍和使用_第8张图片
这个显示也可以直接把你的断点编号显示出来,最后显示的是第几行断点
(3)删除断点d+编号
【Linux】-关于调试器gdb的介绍和使用_第9张图片

我们不能通过行号删除断点,只有通过编号才能删除断点

(4)开始调试
我们刚才进入调试,还没有开始调试,输入r开始调试。

在没有断点的情况下,这个指令就相当于运行程序,并不会像vs上停在main函数的入口:
【Linux】-关于调试器gdb的介绍和使用_第10张图片
在有断点的情况下,会跳到最近的断点处
【Linux】-关于调试器gdb的介绍和使用_第11张图片

4.逐语句和逐过程

这个是调试的关键步骤,我们的逐语句是一条一条语句的的执行,逐过程是一次执行一个过程,不会进入函数体内

(1)逐过程n会跳到下一个过程,有空格也会跳过
【Linux】-关于调试器gdb的介绍和使用_第12张图片
(2)逐语句s进入函数内部
【Linux】-关于调试器gdb的介绍和使用_第13张图片

当你正在调试的时候,像重新调试,就再次输入r,从头开始调试

【Linux】-关于调试器gdb的介绍和使用_第14张图片
(3)查看函数堆栈bt
【Linux】-关于调试器gdb的介绍和使用_第15张图片

(4)快速结束此次函数的运行finish
这个在vs上是没有的,如果你刚进入函数体内,就像出来,就使用Finnish命令:
【Linux】-关于调试器gdb的介绍和使用_第16张图片
(5)函数体内跳到指定行until+行号
【Linux】-关于调试器gdb的介绍和使用_第17张图片

这个也是vs上没有的,但是这个命令只建议在函数体内使用,不建议从另一个函数跳到另一个函数。

5.显示变量

(1)调试的一个重要环节就是查看你想要的变量值,看看和你想的有什么变化
我们使用p+变量命令
【Linux】-关于调试器gdb的介绍和使用_第18张图片
但是我们在vs上的变量是一直可以看到的,不是像现在每次都要输入指令才能看到,而且没有显示变量名,所以我们接下来要使用常显示命令display+变量
【Linux】-关于调试器gdb的介绍和使用_第19张图片

虽然没有vs上看到直观,这也是命令行的缺点

(2)删除变量undispaly+编号
【Linux】-关于调试器gdb的介绍和使用_第20张图片

这个和删除断点一下,需要通过编号来进行删除

6.断点之间的执行

在vs上我们打两个以上断点,通过F5就可以进行断点之间的执行
【Linux】-关于调试器gdb的介绍和使用_第21张图片
在gdb中可以使用c来进行断点之间的执行
【Linux】-关于调试器gdb的介绍和使用_第22张图片

7.启动断点和禁用断点

【Linux】-关于调试器gdb的介绍和使用_第23张图片

禁用断点就是是此断点失能,但是断点还在,我们来看看gdb上的是什么样的

禁用断点disable+编号
【Linux】-关于调试器gdb的介绍和使用_第24张图片
启动断点enable+编号

【Linux】-关于调试器gdb的介绍和使用_第25张图片

三、总结

大家对于gdb的命令了解我今天所讲的这些就行了,大家下来孰能生巧就好,就好比vs上的调试没有什么难度,要多用,就会了,今天博主的分享就到这里了,我们下篇再见
【Linux】-关于调试器gdb的介绍和使用_第26张图片

你可能感兴趣的:(Linux,linux)