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

news2025/4/28 18:54:32

目录

一.版本控制器Git

1.1版本控制器

1.2Git的操作

1.2.1从远端仓库到本地

1.2.2工作区到本地暂存区

1.2.3本地暂存区到本地仓库

 1.2.4本地仓库到远程仓库

1.2.5 .gitignore

 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看一下: 

 

1.2.5 .gitignore

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

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

 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.coloradmin.cn/o/2279925.html

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

相关文章

【MATLAB源码-第259期】基于matlab的64QAM调制解调锁相环环载波同步仿真,对比前后星座图,输出锁相环响应曲线。

操作环境: MATLAB 2022a 1、算法描述 1. 概述 在现代数字通信系统中,为了提高频谱利用率和数据传输效率,经常采用多阶调制技术。64QAM(64阶正交幅度调制)便是其中的一种,它通过将数据映射到64个不同的复…

BEVFusion论文阅读

1. 简介 融合激光雷达和相机的信息已经变成了3D目标检测的一个标准,当前的方法依赖于激光雷达传感器的点云作为查询,以利用图像空间的特征。然而,人们发现,这种基本假设使得当前的融合框架无法在发生 LiDAR 故障时做出任何预测&a…

大模型LLM-微调 RAG

RAG小结 这篇文章是一篇关于大型语言模型(LLMs)增强技术的综述论文,特别聚焦于检索增强生成(Retrieval-Augmented Generation, RAG)这一领域。详细考察了RAG的发展、技术基础、关键技术、评估框架以及未来的研究方向。…

TongESB7.1.0.0如何使用dockercompose运行镜像(by lqw)

文章目录 安装准备安装 安装准备 1.安装好docker和dockercompose: docker、docker-compose安装教程,很详细 2.上传好安装相关文件 安装 使用以下命令导入管理端镜像和运行时镜像 docker load -i tongesb_manage_7100.tar docker load -i tongesb_se…

Acwing-基础算法课笔记之基础算法(二分)

Acwing-基础算法课笔记之基础算法(二分) 一、二分查找的概念1、使用二分的条件2、二分查找的算法流程 二、左闭右闭写法[left,right]三、左闭右开写法[left,right)四、浮点数的二分 一、二分查找的概念 1、使用二分的条件 1、必须是数组(顺…

PHP教育系统小程序

🌐 教育系统:全方位学习新体验,引领未来教育风尚 🚀 教育系统:创新平台,智慧启航 📱 教育系统,一款深度融合科技与教育的创新平台,匠心独运地采用先进的ThinkPHP框架与U…

蓝桥杯R格式--高精度算法模拟

#include <bits/stdc.h> using namespace std; int pos,p1; int ib[1566]; int an[1567]; int n; string a,b; int main() {cin>>n>>a;for(int ia.size()-1; i>0; i--){if(a[i]!.){pos;b.insert(b.end(),a[i]);///string 插char用insert/push_back} …

【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件

心血来潮&#xff0c;看到电视机顶盒满天飞的广告&#xff0c;想改造一下家里的电视盒子&#xff0c;学一下网上的人刷机&#xff0c;但是一切都不知道怎么开始&#xff0c;虽然折腾了一天&#xff0c;以失败告终&#xff0c;还是做点刷机笔记。 0.我的机器 年少不会甄别&…

实战经验:使用 Python 的 PyPDF 进行 PDF 操作

文章目录 1. 为什么选择 PyPDF&#xff1f;2. 安装 PyPDF3. PDF 文件的合并与拆分3.1 合并 PDF 文件3.2 拆分 PDF 文件 4. 提取 PDF 文本5. 修改 PDF 元信息6. PDF 加密与解密6.1 加密 PDF6.2 解密 PDF 7. 页面旋转与裁剪7.1 旋转页面7.2 裁剪页面 8. 实战经验总结 PDF 是一种非…

C++11的多线程

目录 引言 thread类的简单介绍 接口解读 使用范例 move的作用--将资源“夺舍” 原子性操作库(atomic) lock_guard与unique_lock 前置知识&#xff1a;mutex锁&#xff08;类似linux下的ptrhead_mutex_t数据&#xff09; mutex的种类 1. std::mutex 2. std::recursive_…

电子应用设计方案96:智能AI充电器系统设计

智能 AI 充电器系统设计 一、引言 智能 AI 充电器系统旨在为各种电子设备提供高效、安全、智能的充电解决方案&#xff0c;通过融合人工智能技术&#xff0c;实现自适应充电、优化充电效率和保护电池寿命。 二、系统概述 1. 系统目标 - 自适应识别不同设备的充电需求&#xf…

logback日志自定义占位符

前言 在大型系统运维中&#xff0c;很大程度上是需要依赖日志的。在java大型web工程中&#xff0c;一般都会使用slf4jlogback这一个组合来实现日志的管理。 logback中很多现成的占位符可以可以直接使用&#xff0c;比如线程号【%t】、时间【%d】、日志等级【%p】&#xff0c;…

Stable Diffusion 3.5 模型在 Linux 上的部署指南

文章目录 前言-参考资料如下一. ComfyUI安装二.模型下载2.1 安装GGUF和T5 xxl编码模型2.2 安装ComfyUI辅助插件2.3 启动ComfyUI2.4 基础ComfyUI和SD3.5配置2.5 demo 前言-参考资料如下 ComfyUI WIKI教程 sd3.5 github 尝试过sd集成ollama&#xff0c;但是sd在ollama上无法良好…

【Go】Go数据类型详解—指针

1. 前言 在我看来&#xff0c;一门编程语言语法的核心就在于数据类型。而各类编程语言的基本数据类型大致相同&#xff1a;int整型、float浮点型、string字符串类型、bool布尔类型&#xff0c;但是在一些进阶数据类型上就有所不同了。本文将会介绍Go语言当中核心的数据类型——…

Grafana 统一可视化了,告警如何统一?

对于大部分公司&#xff0c;通常都不止一套监控、可观测性相关的系统&#xff0c;云上的、云下的&#xff0c;开源的、商业的&#xff0c;指标的、日志的、链路的&#xff0c;各个系统体验不同&#xff0c;权限难管&#xff0c;如何统一化并为各个团队赋能&#xff0c;是很多技…

LeetCode 110.平衡二叉树

题目描述 给定一个二叉树&#xff0c;判断它是否是平衡二叉树。 示例 1&#xff1a; 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;false 示例 3&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;true 提示&#xff1a; …

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;product.kylinos.cn 开发者专区&#xff1a;developer.kylinos.cn 文档中心&#xff1a;document.kylinos.cn 交流论坛&#xff1a;forum.kylinos.cn 服务器环境以及配置 【内核版本…

软件测试—— 接口测试(HTTP和HTTPS)

软件测试—— 接口测试&#xff08;HTTP和HTTPS&#xff09; HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头&#xff08;Request Headers&#xff09;示例请求标头 响应标头&#xff08;Response Header…

OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为已校准的立体相机的每个头计算校正变换。 cv::stereoRectify 是 OpenCV 中用于立体校正的函数&#xff0c;它基于已知的相机参数和相对位置&am…

ARP 表、MAC 表、路由表、跨网段 ARP

文章目录 一、ARP 表1、PC2、路由器 - AR22203、交换机 - S57004、什么样的设备会有 ARP 表&#xff1f; 二、MAC 表什么样的设备会有 MAC 表&#xff1f; 三、路由表什么样的设备会有路由表&#xff1f; 四、抓取跨网段 ARP 包 所谓 “透明” 就是指不用做任何配置 一、ARP 表…