当前位置: 首页 > news >正文

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

一,版本控制器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.lryc.cn/news/481150.html

相关文章:

  • 【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
  • 力扣力扣力:91.解码方法
  • 一些面试题总结(二)
  • Hive-testbench套件使用文档
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:新技术融合的无限可能(下)(12/30)
  • Python | Leetcode Python题解之第540题有序数组中的单一元素
  • AHB Matrix 四星级 验证笔记(2.4) Tt3.3AHB总线协议测试时的 并行数据
  • 前端零基础学习Day-Eight
  • 贪心算法day3(最长递增序列问题)
  • 【论文复现】MSA+抑郁症模型总结(三)
  • 【软件测试】敏捷模型(Scrum模型)和V模型、W模型
  • 【go从零单排】接口(interface)和多态(Polymorphism)
  • SI5319C-C-GM,SiliconLabs芯科 SI5319C-C-GMR,时钟合成器/抖动清除器 封装 QFN-36 在售 20000PCS 23+
  • 使用批处理脚本批量删除Maven无效依赖
  • 腾讯cos对象存储,下行流量费贵,是否可以加入服务器减少费用,架构如何设计
  • 【SAP】关于权限的继承
  • SpringBoot技术下的共享汽车运营平台
  • SwiftUI开发教程系列 - 第7章:数据流和状态管理
  • Ubuntu系统安装NVIDIA驱动、CUDA、PyTorch等GPU深度学习环境
  • 电子学会2024年3月青少年软件编程(图形化)等级考试试卷(三级)真题,含答案解析
  • 初学者指南:用例图——开启您的软件工程之旅
  • 二叉树遍历/算法数据结构
  • C#字符串的不可变性:内存管理与线程安全的优势分析
  • 【杂记】之语法学习第四课手写函数与结构体
  • 细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法
  • python使用turtle画图快速入门,轻松完成作业练习
  • 【C++】新手入门指南
  • C++使用开源ConcurrentQueue库处理自定义业务数据类
  • 在vue3的vite网络请求报错 [vite] http proxy error:
  • ElasticSearch 简单的查询。查询存在该字段的资源,更新,统计