Linux下git和gdb的使用

news2025/4/7 13:10:58

 🚀每日鸡汤:生活不相信眼泪,即使你把眼泪流成珍珠,灰暗的生活也不会因此而闪光。

目录

一、使用git命令行

1.1安装git、配置仓库

Ⅰ.gitignore

Ⅱ.git

1.2git的基本使用

二、Linux调试器-gdb

2.1、gdb的使用

 2.2、 debug与release版本的区别

①release版本大小小于debug版本

 ②readelf -S 可执行程序(debug/release)

2.3、 gdb的基本指令

Ⅰ断点

Ⅱ调试

一、使用git命令行

1.1安装git、配置仓库

安装git :sudo yum install -y git

我们在自己的gitee开创一个仓库,用于上传我们的Linux文件。然后就可以克隆到Linux

 在我们git下来的文件里面除了两个说明书和一个通行证,还有隐藏文件:.gitignore.git. 我们先来谈.gitignore

Ⅰ.gitignore

它的里面全是文件后缀:

 这些后缀是做什么的呢?凡是在.gitignore里面的后缀,我们在上传的文件后缀凡是被包含于其中的,都不会被上传到gitee,相当于一个过滤器

Ⅱ.git

而所谓的git仓库,本身就是一个目录.git +里面的内容

.git类似于我们的一个中转站,我们先把新增的文件添加到.git目录,然后再上传到码云gitee。介绍完这些,我们再来看一下git的基本使用。

1.2git的基本使用

 ①git add

git add 文件名 这个指令的作用在于将我们刚刚clone下来的目录里新增的文件添加到.git目录

 ②git commit  -m ‘日志’

这个指令先把.git新增的文件合并到本地仓库,注意,这里我们还没上传到远端,而引号里面就是我们要写的日志,我们可以添加一些备注或者日期。

③git push 

把本地的推送到码云。需要我们输入gitee的用户名和密码,我们可以设置为免密码,但是不推荐。

④git status

查看git状态,会显示我们当前进行到git的哪一步了。

当我们git add .之后,查询状态,会提示我们下一步要commit。  

⑤git mv

git mv source destination

要求source文件必须是文件,链接或目录,如果destination是现有的目录,则被认为是移动sourcedestination,如果destination不存在,则被判定是更改名字。

演示:

 我们这里的git mv pu.c love包含三步:

mv pu.c love

rm pu.c

git add .

我们查询git status 就会发现已经执行了git add . 到了git commit的阶段。

需要注意的是如果是改名必须在git commit之后才能改名。

⑥git pull

如果你把远端的仓库里的文件给修改了,就会导致git push失败,这时就需要git pull把文件拉回来进行合并,然后我们就可以提交git pushgit保证本地和远端仓库的文件要保持一致

⑦git log

git log 可以查看所有的提交记录:

我们发现我们commit时写的日志也会显示,所以要提醒各位老铁,不要乱写,hr会看的!!😄

二、Linux调试器-gdb

2.1、gdb的使用

Windows下我们通过编译器比如说vs进行调试,那么在Linux下我们也有自己的调试工具--gdbgdb是基于命令行式的调试,两者在方法上有区别,gdb没有vs调试起来那么方便,但是在思路上还是相近的。

一般我们的编译器上是没有配备gdb的,需要自己安装。

安装指令:sudo yum install -y gdb

这里要提到两个指令,在gdb模式下:

🖊list(l)是查看代码

🖊run(r)是运行代码

🖊quit(q)是推出gdb模式

 那么我们可以看到我这里的查看代码什么也没有看到,这是为什么呢?这是因为,在默认情况下,gdb无法进行对现在发布的程序进行调试。也就是说,默认情况下,我们发布的程序是release版本。我们知道vs下我们想调试必须将软件设为debug模式,设为debug后才能生效,否则不能调试。

怎么才能让他以debug版本发布呢?我们需要在gcc编译软件时添加-g选项。

 

 2.2、 debug与release版本的区别

①release版本大小小于debug版本

这肯定是毋庸置疑的,因为debug版本需要我们使用工具调试,需要文件展示的信息更多。

 ②readelf -S 可执行程序(debug/release)

Linux下有一个readelf -S 可执行程序(debug/release) 指令用于读取可执行程序的二进制构成。

 虽然我们看不懂这些二进制,但是我们可以利用管道过滤一下得到debug信息。

我们可以小结一下Linux下的默认行为:

gcc默认行为:

                    1、默认是动态链接的。

                    2、默认是release版本

vim默认行为:

                    默认打开就是命令模式

2.3、 gdb的基本指令

gdb 退出:CTRL+dquit/q调试命令:

🖊list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

🖊list/l 函数名:列出某个函数的源代码

🖊r或run:运行程序

🖊n或next:逐过程调试,相当于f10

🖊s或step:逐语句调试,相当于f11,可以进入函数

🖊break(b) 行号:给第n行断点。注意:如果打断点的所在行没有代码,就会相当于断点打在后面有代码的行。

🖊info break(b):用于查看所有断点

🖊finish:首先需要进入函数,finish直接运行到将对应函数跑完,如果跑时挂掉,直接确定函数有问题。

🖊p  变量:查看变量内容。

🖊p &变量:查看变量地址。

🖊set var:修改变量的值

🖊continue(c):从一个断点运行到下一个断点

🖊run(r):r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。

🖊d  b:删除所有断点 

🖊d b 断点编号:d  断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。

🖊disable breakpoints:禁用断点

🖊enable breakpoints:启用断点

🖊info(或i) b:查看当前设置了哪些断点

🖊display 变量名:跟踪查看一个变量,每次停下来都显示它的值

🖊undisplay:取消对先前设置的那些变量的跟踪

🖊until X行号:跳至X行,跳出循环到有效代码行(不是空)

🖊breaktrace(或bt):查看各级函数调用及参数,查看调用堆栈

🖊info(i) locals:查看当前栈帧局部变量的值,显示特定区域中的临时变量。

Ⅰ断点

①gdb l  1

从第一行开始显示,显示后面的不用再输入指令,回车即可,gdb会默认记住之前的指令。

 ②gdb b(break) # 

gdb b(break) #:给第#行断点。

我们可以打多个断点。

打过断点后,我们不像在vs上能看到红色断点,我们怎么在Linux上查看断点呢?

③info(i) b

info b:用于查看所有断点。

 ④delete(d) 断点编号

断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。

 在掌握这些基本指令之后,怎么调试呢?在vs下我们f5执行到断点,当断点比较多的时候,f5表示从一个断点执行到另一个断点CTRL+f5 执行可执行程序。那么在Linux下与之对应的哪些指令是调试呢?

Ⅱ调试

①gdb r

r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。

 ②gdb p

p 变量用于查看内容,p &变量查看地址

 但是我们这样查看很不方便,只能看到临时的,不能常显示。

③display && undisplay

display可以常显示变量display &变量可以常显示变量地址

 取消常显示:undisplay 编号

undisplay用于取消常显示,我们取消的也是变量的编号

 ④disable && enable

有些断点虽然我们打下了,但是我们不想让它生效,我们又不想取消这个断点就可以使用disable 断点编号指令。

与之对应的是enable 断点编号重新使断点生效

 

 

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

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

相关文章

矩阵求导简记

很多机器学习算法都需要求解最值,比如最小二乘法求解样本空间相对拟合曲线的最短距离,最值的求解往往通过求导来计算,而机器学习中又常用矩阵来处理数据,所以很多时候会涉及到矩阵的求导。矩阵求导就像是线性代数和微积分的结合&a…

熬夜肝出囊括Java后端95%的面试题解析

为大家整理了一版java高频面试题,其实,一直有大佬在面试,不是在面试,就是在面试的路上,2022其实不是个适合跳槽的年份,稳稳当当当然好,但是,也别委屈自己呀,话不多说&…

Kotlin编程实战——与Java互操作(10)

一 概述 Kotlin 中调用 Java 代码Java 中调用 Kotlin 二 Kotlin 中调用 Java 代码 Getter 和 Setter返回 void 的方法将 Kotlin 中是关键字的 Java 标识符进行转义空安全与平台类型Java类型映射kotlin类型Kotlin 中的 Java 泛型Java 可变参数 三 Java 中调用 Kotlin 属性实…

【ELM预测】基于matlab探路者算法优化极限学习机预测(含前后对比)【含Matlab源码 2204期】

一、探路者算法简介 提出的一种新兴的智能优化算法,该算法的思想起源于群体动物的狩猎行为,种群中的个体分为探路者和跟随者两种角色。算法的寻优过程模拟了种群寻找食物的探索过程,利用探路者、跟随者两种角色不同的位置更新方式以及角色间…

NR/5G - PUSCH repetition次数

--- R15 DCI format 0-1 PUSCH 38.214中的描述,DCI format 0-1调度的PUSCH,包括C-RNTI/MCS-C-RNTI动态DCI调度PUSCH以及CS-RNTI,NDI1时候指示的Configured Grant的重传调度PUSCH,通过PUSCH-Config中的pusch-AggregationFactor指示…

谷粒学院——Day02【环境搭建和讲师管理接口开发】

前后端分离概念 传统单体结构 前后端分离结构 前后端分离就是将一个单体应用拆分成两个独立的应用:前端应用和后端应用,以JSON格式进行数据交互。 后台讲师管理模块环境搭建 一、数据库设计 数据库 guli_edu 数据库 guli_edu.sql # # Structure fo…

3.1 Python 字符串类型常用操作及内置方法

文章目录1. 类型转换2. 字符串索引取值3. 遍历字符串4. 统计长度5. 字符串的复制与拼接5.1 字符串的复制5.2 加号拼接5.3 .join 方法拼接字符串6. 字符比较7. 成员运算8. .format9. .split10. .strip11 . .upper 与 .lower12. .isupper 与 .islower13. .startswith 与 .endswit…

15 个机器学习的基本 Python 库

一定有很多次你试图在 Python 中找到一个库来帮助你完成机器学习项目。但是,经常遇到一件事!今天有如此多的 Python 库可用,并且许多库在每几年之后都会大量发布,因此选择合适的库并不容易。 有时会花费数小时寻找合适的库&#…

【数据结构基础】之图的介绍,生动形象,通俗易懂,算法入门必看

前言 本文为数据结构基础【图】 相关知识,下边将对图的基本概念,图的存储结构,图的遍历包含广度优先遍历和深度优先遍历,循环遍历数组,最小生成树,拓扑排序等进行详尽介绍~ 📌博主主页&#xf…

spring启动流程(二):包的扫描流程

在applicationContext的创建中,我们分析了applicationContext的创建过程,在本文中,我们将分析spring是如何进行包扫描的。 依旧是AnnotationConfigApplicationContext的构造方法: public AnnotationConfigApplicationContext(St…

自底向上语法分析(bottom-up parsing)

自底向上语法分析(bottom-up parsing)自底向上分析概述LR分析概述LR(0)分析增广文法点标记项目LR(0)分析表CLOSURE函数GOTO函数LR(0)自动机的状态集LR(0)分析表构造算法LR(0)自动机的形式化定义LR(0)分析的冲突问题SLR分析SLR算法的关键SLR分析的冲突问题…

U3D热更新技术

作者 : SYFStrive 博客首页 : HomePage 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 🤷‍♀️:创作不易转发需经作者同意😈 💃:程…

适用于 Windows 的企业级 Subversion 服务器

适用于 Windows 的企业级 Subversion 服务器。 Subversion 的 Windows 身份验证 Windows 身份验证是 VisualSVN 服务器的一个关键特性。此功能专为 Active Directory 域环境设计,允许用户使用其 Windows 凭据访问 VisualSVN 服务器。 VisualSVN Server 支持两种不同…

【Linux】基础IO ——中

🎇Linux:基础IO 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看…

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇将记录几次面试中经常被问到的知识点以及对学习的知识点总结和面试题的复盘。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中&…

趣说 Mysql内存篇 Buffer Pool

讲解顺序 先说 Mysql InnoDB 内存结构 Buffer PoolPage 管理机制Change BufferLog Buffer Buffer Pool 接上回 说到了 LRU 算法对内存的数据 进行淘汰 LRU 算法本身是 最近最少使用的,但是这样就会出现 分不清楚 哪些是真正多次使用的数据 LRU缺点&#xff1a…

软考重点10 知识产权

软考重点10 知识产权一、著作权1. 著作权的理解(1)版权:(2)人身权与财产权2. 知识产权的归属判定3. 知识产权的归属判定(1)委托创作(2)合作开发4. 著作权保护对象及范围5…

为什么要有包装类,顺便说一说基本数据类型、包装类、String类该如何转换?

一、前言 开门见山,首先看看八种基本数据类型对应的包装类: 基本数据类型包装类charCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBoolean 其中Character 、Boolean的父类是Object,其余的父类是Number 二、装…

【软件测试】毕业打工两年,辞职一年后转行月薪18K,软件测试让我发起了第一春......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 小徐: 毕…

C++ 类和对象 日期类的实现

作者:小萌新 专栏:初阶C 作者简介:大二学生 希望能和大家一起进步 本篇博客目标: 完成Date类的实现 梳理剩下两个默认函数 好困 跑个步去 睡醒啦! 继续肝 日期类的实现本章目标一. 日期类的实现1.1 Getmonthday的实现…