Linux:版本控制器git的简单使用+gdb/cgdb调试器的使用

news2024/11/12 15:56:53

一,版本控制器git

1.1概念 

为了能够更方便我们管理不同版本的文件,便有了版本控制器。所谓的版本控制器,就是能让你 了解到⼀个文件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录工程的每⼀次改动和版本迭代的⼀个管理系统,同时也方便多人协同作业。 

目前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的文件,例如 doc、excel、dwg、dgn、rvt等等。对于我们开发人员来说,Git 最重要的就是可以帮助我们管理软件开发项目中的源代码文件。

1.2安装git

我们这里使用的是centos系统,对应的安装命令是:

yum install git

 接下来我们可以通过:

git --version

来检验我们的安装是否成功,同时首次注册时需要我们配置我们的gitee账号与邮箱,命令是:(由于github需要科学上网的原因,这里我们不再介绍,如果想要了解可以阅读其他博主的文章)。

git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"

1.3拉取远端仓库与推送代码

1.克隆仓库

在终端中,导航到你想要存放项目的目录,然后使用git  clone命令:

git clone <仓库链接>

注意此仓库链接是下图处中的https链接:

 2.推送代码

 1.添加文件到缓冲区

git add <文件名>
git add .//添加所有更改到缓冲区

2.提交更改到本地仓库

git commit -m "提交说明"//虽然我们可以关闭日志选项,但这里推荐不要关闭

3.推送到远端仓库

git push

如果想要拉取远端仓库的最新更改,可以使用:

git pull

二,调试器gdb/cgdb的使用 

//找子集
vector<vector<int>> ans = {};
vector<int> path;
void dfs(vector<int>& nums, int cur) {
    ans.push_back(path);
    for (int i = cur; i < nums.size(); i++) {
        path.push_back(nums[i]);
        dfs(nums, i + 1);
        path.pop_back();
    }
    return;
}
vector<vector<int>> subsets(vector<int>& nums) {
    dfs(nums, 0);
    return ans;
}

int main()
{
    vector<int> nums = { 1,2,3 };
    vector<vector<int>> ans = subsets(nums);
    for (int i = 0; i < ans.size(); i++)
    {
        for (int j = 0; j < ans[i].size(); j++)
            cout << ans[i][j] << ' ';
        cout << endl;
    }
    return 0;
}

2.1预备 

程序的发布方式有两种, debug 模式和release 模式, Linux gcc/g++ 出来的二进制程序,默认是release 模式。 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g 选项,如果没有添加,程序无法被编译(会显示找不到调试信息):

首次使用cgdb需要安装,安装的命令为:

Ubuntu: sudo apt-get install -y cgdb
Centos: sudo yum install -y cgdb

2.2常见使用

本文中使用的调试器为cgdb(gdb的界面实在让博主痛苦不堪,而cgdb的界面还稍微舒服些,同时二者命令一致,所以对于需要介绍的命令,统一使用cgdb来介绍):

 

需要注意的是,除了打断点的命令可以跟行号以外,其他的比如删除断点等都需要跟上对应的编号才能执行,比如我要删除24行的断点,我们可以先info b,寻找断点的编号,然后将其删除:

以上命令我们通过图片实操介绍效果并没有多好,需要自行尝试才能了解的更深,我们主要介绍cgdb中类似与vs中监视窗口的功能:watch与setvar

2.3watch

执行时监视一个表达式(如变量)的值。如果监视的表达式在程序运行期间的值发生变化,GDB 会暂停程序的执行,并通知使用者:

这里我们i的值发生变化后,系统给出了i的旧值Old value,然后给出i的新值New value(其实说是监视窗口) 。

2.4set var

我们在程序运行出错时,可能是某个变量的值的原因不对导致了错误,但返回源文件更改又太麻烦,所以我们直接通过set var来改变我们对应的值。如果程序输出结果正确,即可直接说明是该变量的问题, 节省一些不必要麻烦:

我们上面的示例代码输出的结果为:

我们通过改i的值来改变输出结果:
 

可以看到如下结果:

TIPS:条件断点 

相信大家在vs中对条件断点已经不陌生了,下面我们单刀直入直接来介绍条件断点的使用方法:

(gdb) b 9 if i == 30 # 9是⾏号,表⽰新增断点的位置

这是打条件断点的方式。如果我们想要给已经存在的断点增加条件来使其变为条件断点呢?:

(gdb) b 9 # 我们在第9⾏新增⼀个断点,⽤来开始测试
//info b
2 breakpoint keep y 0x0000555555555186 in Sum at mycmd.c:9
(gdb)
(gdb) condition 2 i==30 #给2号断点,新增条件i==30

此时我们便不再需要加if去设置条件。注意注意,重要的事情说三遍,除了打断点可以直接通过行号来打断点之外,我们删断点,给断点添加条件,对变量进行监视等都是通过编号进行的!!! 

 

 

 

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

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

相关文章

ML 系列:第 21 节 — 离散概率分布(二项分布)

一、说明 二项分布描述了在固定数量的独立伯努利试验中一定数量的成功的概率&#xff0c;其中每个试验只有两种可能的结果&#xff08;通常标记为成功和失败&#xff09;。 二、探讨伯努利模型 例如&#xff0c;假设您正在抛一枚公平的硬币 &#xff08;其中正面成功&#xff…

【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美

文章目录 C 位运算详解&#xff1a;基础题解与思维分析前言第一章&#xff1a;位运算基础应用1.1 判断字符是否唯一&#xff08;easy&#xff09;解法&#xff08;位图的思想&#xff09;C 代码实现易错点提示时间复杂度和空间复杂度 1.2 丢失的数字&#xff08;easy&#xff0…

存算分离与计算向数据移动:深度解析与Java实现

背景 随着大数据时代的到来&#xff0c;数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构&#xff0c;即计算资源与存储资源紧密耦合&#xff0c;在处理海量数据时逐渐显露出其局限性。为了应对这些挑战&#xff0c;存算分离&#xff08;Disaggrega…

WPS单元格重复值提示设置

选中要检查的所有的单元格 设置提示效果 当出现单元格值重复时&#xff0c;重复的单元格就会自动变化 要修改或删除&#xff0c;点击

Linux笔记之pandoc实现各种文档格式间的相互转换

Linux笔记之pandoc实现各种文档格式间的相互转换 code review! 文章目录 Linux笔记之pandoc实现各种文档格式间的相互转换1.安装 Pandoc2.Word转Markdown3.markdown转html4.Pandoc 支持的一些常见格式4.1.输入格式4.2.输出格式 1.安装 Pandoc sudo apt-get install pandoc # …

MySQL重难点(一)索引

目录 一、引子&#xff1a;MySQL与磁盘间的交互基本单元&#xff1a;Page 1、重要问题&#xff1a;为什么 MySQL 每次与磁盘交互&#xff0c;都要以 16KB 为基本单元&#xff1f;为什么不用多少加载多少&#xff1f; 2、有关MySQL的一些共识 3、如何管理 Page 3.1 单个 P…

solo博客使用非docker方式进行https部署

solo博客使用非docker方式进行https部署 数据库配置启动命令讲解设置自定义访问端口&#xff1a;9168 配置https访问部署效果 服务器上请通过 Docker 部署。但是我服务器资源有限&#xff0c;不想安装docker&#xff0c;直接以编译包的形式运行&#xff0c;节省资源。 如果不会…

【Steam登录】protobuf协议逆向 | 续

登录接口&#xff1a; ‘https://api.steampowered.com/IAuthenticationService/BeginAuthSessionViaCredentials/v1’ 精准定位&#xff0c;打上条件断点 this.CreateWebAPIURL(t) ‘https://api.steampowered.com/IAuthenticationService/BeginAuthSessionViaCredentials/v1…

环形链表问题(图 + 证明 + 题)

文章目录 判断链表是否有环返回链表开始入环的第一个结点 判断链表是否有环 题目链接 思路&#xff1a; 可以明确的是&#xff1a;若一个链表带环&#xff0c;那么用指针一直顺着链表遍历&#xff0c;最终会回到某个地方。 我们可以定义两个指针&#xff08;快慢指针&#xf…

Linux Centos7 如何安装图形化界面

如果系统是以最小安装的话,一般是不带有图形化界面的,如果需要图形话界面,需要单独安装。本篇教程,主要介绍如何在CentOS7中安装图形化界面。 1、更新系统 首先,保证系统依赖版本处于最新。 sudo yum update -y2、安装 GNOME 桌面环境 sudo yum groupinstall "GNOME…

Spark的学习-02

Spark Standalone集群的安装 架构&#xff1a;普通分布式主从架构 主&#xff1a;Master&#xff1a;管理节点&#xff1a;管理从节点、接客、资源管理和任务 调度&#xff0c;等同于YARN中的ResourceManager 从&#xff1a;Worker&#xff1a;计算节点&#xff1a;负责利用自己…

Linux相关概念和易错知识点(20)(dentry、分区、挂载)

目录 1.dentry &#xff08;1&#xff09;路径缓存的原因 &#xff08;2&#xff09;dentry的结构 ①多叉树结构 ②file和dentry之间的联系 ③路径概念存在的意义 2.分区 &#xff08;1&#xff09;为什么要确认分区 &#xff08;2&#xff09;挂载 ①进入分区 ②被挂…

《Linux运维总结:基于银河麒麟V10+ARM64架构CPU部署redis 6.2.14 TLS/SSL哨兵集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、简介 Redis 哨兵模式是一种高可用性解决方案,它通过监控 Redis 主从架构,自动执行故障转移,从而确保服务的连续性。哨兵模式的核心组件包括哨兵(Sentine…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例&#xff1a;2、继续添加功能&#xff0c;增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中&#xff0c;本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…

腾讯云nginx SSL证书配置

本章教程,记录在使用腾讯云域名nginx证书配置SSL配置过程。 一、nginx配置 域名和证书,替换成自己的即可。证书文件可以自定义路径位置。服务器安全组或者防火墙需要开放80和443端口。 server {#SSL 默认访问端口号为 443listen 443 ssl; #请填写绑定证书的域名server_name c…

RabbitMQ的DLX(Dead-Letter-Exchange 死信交换机,死信交换器,死信邮箱)(重要)

RabbitMQ的DLX 1、RabbitMQ死信队列2、代码示例2.1、队列过期2.1.1、配置类RabbitConfig&#xff08;关键代码&#xff09;2.1.2、业务类MessageService2.1.3、配置文件application.yml2.1.4、启动类2.1.5、配置文件2.1.6、测试 2.2、消息过期2.2.1、配置类RabbitConfig2.2.2、…

陪诊问诊APP开发实战:基于互联网医院系统源码的搭建详解

时下&#xff0c;开发一款功能全面、用户体验良好的陪诊问诊APP成为了医疗行业的一大热点。本文将结合互联网医院系统源码&#xff0c;详细解析陪诊问诊APP的开发过程&#xff0c;为开发者提供实用的开发方案与技术指导。 一、陪诊问诊APP的背景与功能需求 陪诊问诊APP核心目…

FreeRTOS 21:递归互斥信号量

递归信号量&#xff0c;见文知义&#xff0c;递归嘛&#xff0c;就是可以重复获取调用的&#xff0c;本来按照信号量的特性&#xff0c;每获取一次可用信号量个数就会减少一个&#xff0c;但是递归则然&#xff0c; 对于已经获取递归互斥量的 任务可以重复获取该递归互斥量&…

算法|牛客网华为机试41-52C++

牛客网华为机试 上篇&#xff1a;算法|牛客网华为机试21-30C 文章目录 HJ41 称砝码HJ42 学英语HJ43 迷宫问题HJ44 SudokuHJ45 名字的漂亮度HJ46 截取字符串HJ48 从单向链表中删除指定值的节点HJ50 四则运算HJ51 输出单向链表中倒数第k个结点HJ52 计算字符串的编辑距离 HJ41 称砝…

mysql5安全审计

安装插件 插件需要严格与数据库版本适配&#xff0c;不然安装过程中会出现问题 解压插件 cd 插件所在路径unzip audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip#查看mysql默认插件目录 mysql> SHOW GLOBAL VARIABLES LIKE plugin_dir;# 将插件移动到mysql默认插件目…