Linux初识:【版本控制器Git】【调试器gdb/cgdb使用】

server/2025/1/21 17:36:40/

目录

一.版本控制器Git

1.1版本控制器

1.2Git的操作

1.2.1从远端仓库到本地

1.2.2工作区到本地暂存区

1.2.3本地暂存区到本地仓库

 1.2.4本地仓库到远程仓库

gitignore-toc" name="tableOfContents" style="margin-left:80px">1.2.5 .gitignore

git%EF%BC%89-toc" name="tableOfContents" style="margin-left:80px"> 1.2.6Windows上操作(需要安装Tortoisegit

 1.2.7同步远端和当地

二调试器-gdb/cgdb使用

2.1 -g选项

2.2先简单认识gdb

l+数字

b+数字和r

 c

2.3 安装cgdb

2.4cgdb命令

 b+文件名+:+数字

info+b

 d+断点编号

n

s

bt

 finish

p+变量:

disable和enble +断点编号

 until

 display+变量和undisplay+编号

info locals

​编辑

2.5调试技巧

watch

 set var

条件断点

添加条件断点

​编辑 

 给存在的断点添加条件


一.版本控制器Git

1.1版本控制器

为了能够更方便我们管理不同版本的文件,便有了版本控制器。所谓的版本控制器,就是能让你 了解到一个文件的历史,以及它的发展过程的系统。通俗的讲就是一个可以记录工程的每一次改动和版本迭代的一个管理系统,同时也方便多人协同作业。 目前最主流的版本控制器就是 Git。Git可以控制电脑上所有格式的文件,例如doc、excel、dwg、 dgn、rvt等等。对于我们开发人员来说,Git最重要的就是可以帮助我们管理软件开发项目中的源代码文件!

git是一个底层的版本控制器软件。gitee或github是基于git的网站或平台。

1.2Git的操作

1.2.1从远端仓库到本地

我先在gitee创建一个远程仓库:

新创建好的仓库会有下面的这些东西:

git既能服务客户端也可以服务远端,所以我们的远程仓库也可以拉取到本地。

 然后再命令行输入:

git clone+(仓库链接)

 

进入仓库跟我们在远程仓库看到的东西的一样的:

 

 


这里面有隐藏文件.git这个其实就是本地仓库。它会记录我们所有的修改记录,git在提交的时候只会记录变化的部分。 

举个例子,我创建一个test.c: 

 

本地仓库是没有记录下来的,因为.git没有记录,而我们当前的目录只是一个工作区:

 那要怎么添加?

1.2.2工作区到本地暂存区

git add+文件名:

虽然但是这样不是真正的添加到本地仓库,而是到一个暂存区的地方:

 

git status可以查看有哪两个新文件: 

 

1.2.3本地暂存区到本地仓库

 git commit -m +"文件描述"

这个的作用就是移动到本地仓库: 

git log :

查看日志提交记录: 

 

 1.2.4本地仓库到远程仓库

git push 

提交到远端仓库:

下面还要输入用户名和密码

 这样的就成功了:

到我们的gitee看一下: 

 

gitignore" name="1.2.5%20.gitignore" style="background-color:transparent">1.2.5 .gitignore

vim查看文件里的内容(保存的是需要忽略特定后缀的文件):

上传文件的时候可以帮我们过滤掉里面后缀的文件:

git%EF%BC%89" name="%C2%A01.2.6Windows%E4%B8%8A%E6%93%8D%E4%BD%9C%EF%BC%88%E9%9C%80%E8%A6%81%E5%AE%89%E8%A3%85Tortoisegit%EF%BC%89" style="background-color:transparent"> 1.2.6Windows上操作(需要安装Tortoisegit

先新建一个文件: 

记得先复制远程仓库的链接。

打开文件,右键选择gitclone:
 

 它会自动帮我们填好远端仓库的链接,直接点击OK。


上面是从远端到本地的过程。

我修改一个文件的内容:

 

现在要从本地到远端:

在Windows点击commit就行了,因为它会自动的帮我们把add个commit一起做了:

然后点击push: 

 

完成: 

 1.2.7同步远端和当地

当我们在上面用Windows机器对文件进行了修改更新了远端仓库的内容,那我的Linux机器并不知道远端更新了,这时如果我去更新远端仓库的话就会出现冲突

 

git pull: 

把远端仓库的内容做一次更新,之后再进行push:

这里就成功了。 

 同理,Windows的push报错也是相同的道理。

二调试器-gdb/cgdb使用

2.1 -g选项

程序的发布方式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的二进制程 序,默认是 release 模式。

Linux下我们编译好的代码无法直接调试

要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项,如果没有添加,程序无法被编译

make:

如果不加-g选项的话,我们形成的可执行程序要比加了的小,因为默认没有debug文件: 

 

2.2先简单认识gdb

gdb +文件名:

开始调试 

l+数字

从哪个位置开始查看代码,可以回车查看下一页

b+数字和r

打断点 和运行:

 c

运行到下一个断点处

这终归还是很麻烦,不好直观的看到代码运行

2.3 安装cgdb

安装cgdb:

 • 上面的基本调试还是麻烦,虽然是黑屏,但是还是想看到代码调试

• 推荐安装cgdb: • Ubuntu:sudo apt-get  install  -y  cgdb  

• Centos: sudo  yum  install  -y  cgdb

2.4cgdb命令

 b+文件名+:+数字

打断点

14的数字会变红: 

 

info+b

查看断点 

Num列表示断点编号

 d+断点编号

删除断点,注意d不能跟行号

n

逐过程 

在17行打一个断点,按r到这一行会停下来,再按n会到下一行。

s

逐语句 

跟上面一样的断点这里会进入函数的内部:

bt

查看栈桢 :

系统每调用一次函数都会创建一个该函数的栈桢。

 finish

结束当前函数的运行:

直接跳到原来进入函数的地方: 

 

p+变量:

 查看临时变量的值:

 

disable和enble +断点编号

断点可以被使能

 

1号断点的Enb变成了n,此时的断点不可以被使用,但是存在。 

 

 until

某一个函数内部直接跳转到某一行:

 display+变量和undisplay+编号

 p只能显示当下的变量值,想让变量值长显示:

注意undisplay加编号 

info locals

查看函数中所有变量的值:

 

 

 

2.5调试技巧

watch

监视某个变量是否变化:

使用info b可以查看我们刚才监视的变量的编号,这里是2。1是断点,取消监视的做法跟删除断点的做法一样,d+编号。

时刻可以看到变化 (注意只有监视的值被修改了才会通知我们)

 

 set var

可以直接在函数内部改变某个变量的值,来演示结果被修改之后的值是不是正确的。

上面可以看到我把result的值更改为了9999,到达函数外部n的值也变成了9999 。 

条件断点

添加条件断点

只有当i==10时,才会停下来: 

 

进入Sum函数后,按c跳到下个断点

查看i 的值,就是在i等于10时停下的: 

 

 给存在的断点添加条件

condition+断点编号+条件

本来有两个普通断点,后面我把第二个断点添加了额外条件:i==20时才停下:

 cgdb分屏操作ESC进入代码屏,i回到gdb屏


http://www.ppmy.cn/server/160246.html

相关文章

神经网络:什么是交叉熵?

在机器学习和深度学习中,交叉熵(Cross Entropy) 是一种常见的损失函数,特别适用于分类问题。尽管这个术语听起来可能有点复杂,但通过一个类比,我们可以更直观地理解它的含义和作用。 类比场景:…

客户端/服务端 负载均衡

在分布式系统中,负载均衡是确保系统高可用性、提高系统吞吐量和响应时间的一种关键技术手段。负载均衡可以分为 客户端负载均衡 和 服务端负载均衡,它们各自有不同的实现方式,适用于不同的应用场景。 1. 客户端负载均衡(Client-S…

用户中心项目教程(五)---MyBatis-Plus完成后端初始化+测试方法

文章目录 1.数据库的链接和创建2.建库建表语句3.引入依赖4.yml配置文件5.添加相对路径6.实体类的书写7.Mapper接口的定义8.启动类的指定9.单元测试10运行时的bug 1.数据库的链接和创建 下面的这个就是使用的我们的IDEA链接这个里面的数据库: 接下来就是输入这个用户…

npx和npm区别

npx 和 npm 是 Node.js 生态中的两个工具,它们有不同的用途和功能: 1. npm(Node Package Manager) 主要作用: 包管理工具: 用来安装、管理、卸载 Node.js 的包(module/library)。提…

Springboot 三层架构(Controller(控制层)、Dao(数据访问层)、Service(业务逻辑层))

文章目录 开发Stringboot一个功能的流程Springboot 三层架构一、Controller(控制层)Controller(控制层)的作用1、如何创建Controller(控制层)2、在Controller(控制层)中如何调用Serv…

基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战

目录 前言 一、PostGIS空间求解 1、相邻的求解 二、后台程序实现 1、数据查询的实现 2、API接口实现 三、WebGIS可视化实现 1、空间面展示 2、增加面标注 3、图例展示 4、与缅甸距离较近的区县信息 四、总结 前言 云南,这个位于中国西南边陲的省份&…

数据分析的新利器-微软开源的GraphRAG

微软的GraphRAG是一种结合了图结构和检索增强生成(Retrieval-Augmented Generation,RAG)技术的先进框架,旨在提升大型语言模型(LLM)在处理复杂问题时的性能。GraphRAG通过构建知识图谱,将非结构…

程序设计安全方案,软件开发安全指南,信息系统安全管理规范(Word原件)

2.1.应用系统架构安全设计要求 2.2.应用系统软件功能安全设计要求 2.3.应用系统存储安全设计要求 2.4.应用系统通讯安全设计要求 2.5.应用系统数据库安全设计要求 2.6.应用系统数据安全设计要求 软件全套精华资料包清单部分文件列表: 工作安排任务书,可行…