初识Linux · 有关gdb

news2024/12/23 0:15:38

目录

前言:

1 预备知识

2 gdb的使用


前言:

当我们Linux学到了这里的时候,我们大概会有一种感觉是,从VS2022转战Linux,写代码对我们来说是一种重新构建读写代码的一个过程,从文本编辑器,到文本编译器,再到今天的调试器gdb,读写代码的每个部分在Linux这里都是单独拉出来的,所以不免许多人会感受到困难,甚至于某些简单的代码在Linux这里都有点感觉晦涩难懂了,但是呢,难关总会过去的,咱们今天把gdb一看,我们就能再跨越代码的一大关卡 - 调试


1 预备知识

首先引入第一个问题,我们平常在VS编译代码的时候,左上角的debug和release是非常显然的,我们可以自由选择编译模式,那么在Linux中,编译代码的模式是什么呢?

在linux中,gcc/g++编译代码默认是以release进行编译的,那么我们如何切换到debug模式呢?

只需要加 -g就可以:

这里是已经编译好了的,那么试着猜猜,哪个是debug版本,哪个是release版本的?

还是很好猜的,release版本的优化比debug厉害不说,debug也被称为调试版本,所以自然会存在一些调试信息,自然的,debug版本的大小比release版本的大。

那么我们如何看到调试信息呢?

输入以上命令即可,因为部分命令还没有涉及,这里先不做介绍。

以上就是调试信息,现在我们就该进入到调试了。


2 gdb的使用

首先,我们知道,在vs常用的技巧有,逐语句调试,逐过程调试,打断点,和断点配套的F5调试,监视窗口,跳转到指定行调试等。

那么我们在gdb里面要做的,也就是这些事。

首先进入调试很简单,就是gdb + 可执行文件。但是前提是已经用gcc -g生成了二进制的调试文件,此时才可以使用gdb进行调试。

进入之后,我们是不可能记得住我们所有的代码的,那么就需要我们将代码展示出来,此时用的指令是l,也就是list的意思,可以简写成l,后面+数字表示从哪里开始打印:

它的特点是默认打印10行,并且是打印该行数的上下文,所以这里打印了上下文:

并且gdb有一个特点就是,默认执行上次的命令,所以我们输入了一个l 5之后,就可以一直空格,直到:

这个的出现,代表已经打印完了,这里的l 6的数字并不是绝对数字,是相对的,我打印10行之后,l 6 代表的是10行之后的第6行。

还可以l 文件名:函数名,直接打印函数,也可以直接l 函数名:

好了,现在可以看到代码了,那么下一步是,如何打断点?

打断点用到的命令是Breakpoint,简称b,对应的操作有b 文件名:函数名/行号,或者直接b 函数名/行号:

那么断点就打好了,在VS里面,断点很显眼的来了个大红点,但是Linux中打了断点我们应该如何查看呢?

此时就要info (信息),简称为i,i b即可:

但是呢,因为主函数本质是代码块,所以打在主函数的断点就是打在主函数的第一条可执行语句上,所以有两个会重复。

那么断点有了,我们如何删除呢?删除用的是d,但是断点的名字是啥?欸~编号咯。

此时就删除成功了,我们再打断点看看:

欸?不难发现断点的名字是线性增长的,不存在回退的说法。

这是linux中断点的一个特性。

肯定会有人问的,Enb是什么意思?enable。代表是否可执行这个断点。

我们想要禁止一个断点只需要:

同理,希望它能使用只需要:

好了,基本的打断点我们会了,我们如何逐语句或者逐过程调试呢?

逐过程是:

next,下一步,简称为n,但是使用next的前提是要先run一下程序,不然程序跑不起来如何调试?

run就相当于F5,如果没有断点就是直接运行。

这里因为我是将断点打在了函数上,所以直接就运行了。

逐语句就是step,脚步,简称为s:

每s一下就会打印出执行的语句,如果超了,或者是程序没有run就会报以上的错误。

展示出来都是一样的,也是有自己的编号的,那么同理,undisplay也是需要编号的。

那么在VS里面还有断点之间互相跳动的,此时要用到的就是continue,继续,简称为c:

这样即可。

当然了,display是展示,调试的时候一直展示的意思,如果我们只是看一下,使用print,打印,简称p即可,此时$后面的数字就是打印的次数。

直接运行完一个函数不止可以逐过程,也可以用finish,代表,运行结束所在函数就停下来,也有until,比如我们进入了一个循环,想直接跳过就用until:

就像这样。

info local是查看局部栈帧变量的值,既然是栈帧,我们也可以看到是否有压栈:

bt即可,同理,也是有自己的编号的。

好了,该离开了,quit ,离开,简称q:

以上是关于gdb的一些浅薄的介绍,更详细的后续再更新。


感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2113578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎样将手机屏幕(远程)投屏到家里的大电视上?

我不住家里,前几次回去都会替老爸老妈清理手机。这两个星期没空回去,老爸吐槽手机用几天就又卡了,其实就是清理一些手机缓存的问题。 我说我远程控制他的手机,给他清理一下。他一听“控制”就不喜欢,说我大了&#xf…

视频中的噪点怎么去除?

在数字视频时代,拍摄高质量的视频成为了许多人的追求。然而,在实际拍摄过程中,由于多种原因,我们常常会遇到视频噪点过多、画面模糊的问题,这不仅影响了观看体验,还可能让精心拍摄的作品大打折扣。那么&…

【生物信息学算法】图算法1:概念和算法

文章目录 1. 图的定义、分类、表达方式图的定义图的分类表达方式Python实现 2.相邻节点和度概念定义python实现 3.路径、距离和搜索路径和距离搜索环 4.图论中的欧拉定理 1. 图的定义、分类、表达方式 图的定义 图G可以由两个集合来定义,即G(V,E)。其中&#xff0…

MapSet之二叉搜索树

系列文章: 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 目录 前言 1.二叉搜索树 1.1 定义 1.2 操作-查找 1.3 操作-新增 1.4 操作-删除(难点) 1.5 总体实现代码 1.6 性能分析 前言 TreeMap 和 TreeSet 是 Java 中基于搜索树实现的 M…

申万宏源证券完善金融服务最后一公里闭环,让金融服务“零距离、全天候”

在数字化转型的浪潮中,申万宏源作为金融行业的先锋,持续探索科技如何赋能金融服务,以提升企业效率并优化客户服务体验。面对日益增长的视频化需求,传统的图文形式已难以满足市场与用户的新期待。为了应对这一挑战,申万…

简单梳理一个历史脉络

B 站上王山水老师的一个视频引发的思考:没有司马篡国,能避免300年的大乱世吗? 我的答案如下: 视野放宽到欧亚大陆,广义上公元184年黄巾军起义开启内乱,狭义上公元220年正式进入三国,280年晋统一…

新手做短视频素材在哪里找?做短视频素材工具教程网站有哪些?

本文将为你提供一系列新手友好的视频制作资源,包括素材网站和编辑工具,帮助你快速成为短视频领域的新星。让我们从国内知名的蛙学网开始介绍。 蛙学网:新手的视频素材天堂 对于短视频新手而言,蛙学网绝对是一个宝库。该网站提供了…

1-10 图像增强对比度 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 enhanced_image cv2.convertScaleAbs(image, alpha1.5, beta0) 三、运行现象 四、完整工程贴出 一、提前准备 1、树莓派4B 及 64位系统 2、提前安装opencv库 以及 numpy库 3、保存一张图片 二、代码详解 import cv2 # 增强图像的对比度 …

环境配置!

一 安装CUDA 在安装CUDA之前,建议先看下pytorch的更新版本,应为pytorch更新较慢,请保证CUDA的版本,对应的pytorch版本存在。 去pytorch官网查看电脑支持的cuda版本最高是多少。PyTorch 我这边在网站上看最高支持的CUDA版本为12.…

SpringDataJPA系列(7)Jackson注解在实体中应用

SpringDataJPA系列(7)Jackson注解在实体中应用 常用的Jackson注解 Springboot中默认集成的是Jackson,我们可以在jackson依赖包下看到Jackson有多个注解 一般常用的有下面这些: 一个实体的示例 测试方法如下: 按照上述图片中的序号做个简…

【python】Python中如何通过rembg实现图片背景去除

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Java预备知识 - day2

1.IDEA的简单使用与介绍 1.1 IDEA的项目工程介绍 Day2_0904:项目名称 E:\0_code\Day2_0904:表示当前项目所在路径 .idea:idea软件自动生成的文件夹,最好不要动 src:srcsourse→源,我们的源代码就放在这…

计算机网络知识点复习——TCP协议的三次握手与四次挥手(连接与释放)

TCP协议的三次握手与四次挥手(连接与释放) 一、前言二、简单的知识准备1. TCP协议的主要特点2. TCP报文段 三、TCP连接的建立(三次握手)四、TCP连接的释放(四次挥手)五、TCP连接与释放的总结六、结束语 一、…

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结…

qtdraw-使用qt绘图之开源源码学习

1. 资源介绍 功能:使用qt在画板上绘制各种形状,并保持绘制内容到xml文件中。 项目源码:https://github.com/egan2015/qdraw 软件界面: 1.1 支持shape 6种 1.2 支持的功能 6种,分别是对绘制的图形进行撤销undo&…

计算机网络(四) —— 简单Tcp网络程序

目录 一,服务器初始化 1.0 部分文件代码 1.1 关于Tcp协议 1.2 创建和绑定套接字 1.3 监听 二,服务器启动 2.1 获取连接 2.2 提供服务 2.3 客户端启动源文件 Main.cc 二,客户端编写 2.1 关于Tcp客户端 2.2 客户端代码 2.3 效果…

Linux第十一节课 - 进程

一个程序从磁盘以文件的形式加载到内存之后,已经变成了进程! 引入管理者和被管理者 1、管理者和被管理者不需要见面!(例如学生和校长!) 2、管理者在不见被管理者的情况下,如何做好管理呢&…

隐私计算实训营:SplitRec:当拆分学习遇上推荐系统

拆分学习的概念 拆分学习的核心思想是拆分网络结构。每一个参与方拥有模型结构的一部分,所有参与方的模型合在一起形成一个完整的模型。训练过程中,不同参与方只对本地模型进行正向或者反向传播计算,并将计算结果传递给下一个参与方。多个参…

文件操作与隐写

一、文件类型的识别 1、文件头完好情况: (1)file命令 使用file命令识别:识别出file.doc为jpg类型 (2)winhex 通过winhex工具查看文件头类型,根据文件头部内容去判断文件的类型 eg:JPG类型 &a…

Wni11 下 WSL 安装 CentOS

Wni11 下 WSL 安装 CentOS 方法一、安装包安装下载包安装安装打开 CentOS1. 从 Windows 终端 打开2. 从 PowerShell 打开 方法二、导入 CentOS 的 tar 文件进行安装0. 查看版本(可选)1. 导出 Docker 容器到 tar 文件2. 将 tar 文件导入 WSL2.1. 导入 tar…