当前位置: 首页 > news >正文

Linux——工具(4)gdb调试器

一、准备工作

在了解学习gdb之前,我们需要知道一些知识。

1.我们所编写的程序,有debug和release版本,其中前者是添加调试信息的,后者就没有,我们一般写c/c++都是debug版本,但在Linux中,我们用gcc/g++所编译的文件都是release版本的,但我们的gdb需要我们以debug版本发行,所以我们需要改动一下,只需要在原来的gcc指令后面加-g选项即可。

本篇内容我们的重点主要是介绍gdb的相关指令使用

二、gbd的基本语法

gdb是干什么用的,它是一个调试器,相当于我们vs软件中的各个操作的集合软件,比如逐语句运行,打断点等等。

语法很简单,只需要gbd后面加要调试的程序即可,我们先简单写一个小程序并用一下gdb指令

这样我们就进入了gdb调试部分,想退出只需要输入quit即可。

三、gdb的相关指令

1.gdb会记住最新的一条命令,当我们输入回车时会继续执行一次最新的命令

2.查看代码 l+数字

我们发现一个问题,进入到gdb后我们好像无法看到代码,代码都看不到更别谈如何调试了,所以我们第一个命令就是l+数字来查看代码,数字输入几就会展示从该行向下的10行代码(并不会完全显示)如果我们想继续向下显示可以按几次回车(参考第一条原理)。

此外,我们也可以输入l+函数名来展示有该函数名的所在行代码以及我们也可以输入l+文件名:行号来展示指定文件的目标行代码。

3.打断点

使用vs时我们知道,想查看一个大文件哪里出现了问题,调试中的断点是非常重要的,在Linux中的调试也是如此。Linux中的断点我们输入b即可

b+行号:在该行打上断点

info b:查看已打的断点信息

我们添加断点的时候可以是用行号,但删除断点就不行了,删除断点的命令为d,但d后面跟的不是行号,而是我们的断点编号,也就是我们的第几个断点,比如d 3表示我要删去我第三个标记的断点。在我们一个调试周期下,断点编号是线性递增的,比如我一开始打了三个断点然后都删除了,此时我再打一个,这个编号就是4。当我们退出此次gdb一个周期结束。

而且,我们也可以像l命令一样,用b加函数名来打断点。

禁用断点:我们想在此处加断点,但又不想程序在这里停下来而设置的断点。Linux中禁用断点我们用disable+断点编号

其中的enb就是是否是禁用断点,n代表已禁用。

4.r命令(run):运行代码(遇断点会停)

5.逐过程运行(按代码块运行,不会逐语句进入到函数内部) :n命令(next)

6.逐语句运行(可以进入函数内部):s(step) 

7.监视变量:display+变量。去掉输入undisplay+变量编号即可

8.p+name:打印一个变量(或地址)的值。

9.until+行数:直接跳转到该行,一般用于查看多次循环后的结果。

10.finish :把当前所在的函数所有语句跑完

11.c:从当前位置连续执行语句(continue)

四、比gdb更优的选择——cgdb

我们发现,当我们用gdb调试的过程中,如果我们的次数过多,会导致之前用命令显示的代码给覆盖掉,也就是不能保证持续的可视化,而有一款调试器,它能做到调试的过程中,始终保持代码的可视性,也就是cgdb,安装方法如下:

sudo yum install -y cgdb

而且,这个cgdb和我们gdb的指令几乎是 完全相同的

五、watch与

watch用于监视程序执行时的一个表达式的值。如果监视的对象在程序运行期间的值发生变化,gdb会停止运行并告知使用者。我们想观察谁直接watch+name即可,也可以同时watch多个对象。

六、条件断点

条件断点也是断点,它只是会在特定条件下才会触发,正常情况下不会影响代码的执行。

b n if(条件) 

其中n为行号,我们用打断点的命令来打条件断点。除此之外,我们也可以在原有的断点追加一个条件使其变成条件断点。

condition 断点编号 条件

————关于gdb的基本操作我们就介绍到这里 

相关文章:

  • LaTex安装流程(附安装包)LaTex超详细保姆级图文安装教程
  • 华为eNSP:配置P2P网络类型
  • Python设计模式 - 建造者模式
  • 在 UniApp 中实现stream流式输出 AI 聊天功能,AI输出内容用Markdown格式展示
  • 2025华为OD机试真题(Java+Py+C+JS)专栏导航帖(持续收录中)
  • 【贪心算法】将数组和减半的最小操作数
  • 利用paddleocr解决图片旋转问题
  • CI/CD—Jenkins cron定时任务表达式
  • 硬件基础(4):(5)设置ADC电压采集中MCU的参考电压
  • numpy广播性质
  • 激光雷达目标探测顶刊简介2025.3.11
  • 【医院内部控制专题】7.医院内部控制环境要素剖析(三):人力资源政策
  • 海康线扫相机平场矫正教程
  • 快速学习Bootstrap前端框架
  • Django Admin 站点管理详解
  • Mysql快速学习——《一》: Mysql的基础架构
  • Uniapp实现多种文件类型上传
  • 缓存之美:Guava Cache 相比于 Caffeine 差在哪里?
  • 文件管理器显示文件的方式是图标还是小图标还是列表需要看ListView_IsIconView宏定义
  • Git 的基本概念和使用方式。
  • 被炒热的“高潮针”:超适应症使用,安全性和有效性存疑
  • 山大齐鲁医院护士论文现“男性确诊子宫肌瘤”,院方称将核实
  • 客场不敌蓉城遭遇联赛首败,申花争冠需要提升外援能力
  • 研究完蚂蚁搬家,我好像明白了为什么我们总是堵车
  • 履新宿州市政府党组书记后,任东暗访五一假期安全生产工作
  • 停电催生商机,中国品牌 “照亮” 西班牙