Linux·权限与工具-git与gdb
1. git工具
git是一款软件,发明它的人同时发明了Linux操作系统,也就是大名鼎鼎的Linus Torvalds
林纳斯·托瓦兹。后来人们把git软件包装,产生了github、gitee等平台。
git产生的初衷就是便于进行多人协同管理,同时它还可以用来将本地文件上传到云端管理,进行版本控制。
1.1 git的安装与仓库下载
安装指令:yum install -y git
第一步:新建仓库
首先在gitee上创建账户,并新建一个仓库。


创建好之后复制这里这个链接,然后回到Linux,输入命令 git clone 链接 就可以把远端的仓库同步下来

可以看到这个文件夹就是我们远端的仓库。
第二步:三板斧提交代码
所谓三板斧就是add commit push
可以将写好的代码放在这个目录下

我们将上节写的代码复制到这个目录下之后,这个文件与git暂时没有任何关系。
git在本地的结构是这样的


这个目录下有一个.git的隐藏目录,这里面的文件才算是被git托管起来的内容,其下还有index文件缓冲区,和objects文件的本地目录两个模块。我们都是用 add 先将文件添加到缓冲区,再用commit -m “日志描述” 将文件放入本地目录中,才算在本地用git软件将文件托管了起来。
下面我们操作一下

这里我们就提交失败了,在此要说两个问题,第一个是 git status 命令可以查看git缓冲区中都有哪些文件,就比如我们刚才add了hello.c文件就在这里出现了。
第二个就是这个提交失败的原因,就是我们没有设置提交人信息,我们把Run下面那两行代码复制并修改双引号中的内容就好了

此时本地的git就已经托管好了,下面我们使用 git push 命令上传

它会要求输入一下gitee的用户名和密码,然后就可以上传好了

刷新一下就可以在仓库中看到刚刚上传的文件。
1.2 .gitignore文件
这个文件就是用来忽略某些特定后缀的文件用的,使得这些文件不会被add进文件缓冲区。

我们可以vim进这个文件看看

这些后缀都是不会进入缓冲区的,我们可以通过修改这个文件来控制哪些后缀的文件可以放入缓冲区。
事实上这个文件存在的意义时避免那些中间文件被上传。
1.3 pull指令
当两个人同时管理一个仓库时难免会因为两人本地文件的不同,导致具体应该使用谁的本地文件作为远端文件的上传版本的冲突。
因此git在解决这一问题时使用了一个强制与云端同步的策略,就比如一个人先把本地修改好的文件上传到云端了,另一个人想把他的文件上传的时候就会发现因为云端和本地文件的版本冲突而git拒绝上传文件。
此时就需要使用指令 git pull 将云端文件拉取下来同步到本地,才能再将本地文件上传到云端。如果说云端文件修改了一行代码,那在pull到本地之后,也会在文件中体现出来哪行代码被修改了,导致与本地文件不同,此时就需要程序员自己去做合并,再将最终版本push上传。
2. gdb 与 cgdb 工具
gdb工具是最常见的命令行式调试工具。首先我们可以先查看一下自己的系统中有没有安装这款软件。
使用命令 gdb --version ,如果出现如下信息就说明安装好了

否则使用命令 yum install -y gdb 安装软件
程序发布方式有两种,release版本和debug版本,调试只能在debug版本下进行。对于gdb工具来说也是如此。
我们先做一下准备工作,随便写一个程序,当然,可以还写一个makefile方便编译


程序的内容就是计算连加,makefile中写的编译逻辑就是正常的编译。但是这么写的话在gcc/g++编译器下是默认编译成release版本的程序。

如果想要发布成release版本就要在编译命令最后加上 -g 选项

可以看到debug版本的程序明显要比relese版本的大,因为它还多包含了一些调试信息。
2.1 进入gdb软件与打断点
gdb+需要调试的程序就可以进入gdb模式,对这个程序进行调试操作

quit / q 可以用quit或简写成q退出gdb软件
当我们进入软件之后当然需要看到代码才行
list / l + 数字/函数名 list或简写成l,加上行号或函数名,就可以展示这个行号附近的10行代码,展示过一次之后按回车就可以接着继续向后展示下面的代码。

break/b + 数字/函数名 breakpoint设置断点,需要指定打断点的行号位置或函数位置
d + 数字 delete breakpoint删除某个断点,这里的数字不是行号了,而是断点的序号
info break/b 显示断点信息

这里我在Sum函数和main函数的位置都打上了断点,观察断点信息。Num中写的就是断点序号,d后面的数字就是这个东西。What中会显示这个断点具体打在了第几行上。
这里要提示一下,断点的序号在一个调试周期内是固定线性增长的,就是说即使现在把断点1,2都删了,再打断点,其序号也是从3开始增长的。除非退出gdb软件重进,但如果这么做的话,上一个调试周期中未删除的断点也都没了。
disable + 数字 禁用断点
enable + 数字 启用断点

2.2 调试运行 展示变量
run / r 开始调试,相当于VS调试中的F5
c 运行到下一断点,相当于VS中的F5
next / n 逐过程,单步执行,不进入函数内部,相当于VS中的F10
step / s 逐语句,单步执行,进入函数内部,相当于VS中的F11
finish 跑完当前所处的子函数

首先我使用 r ,开始调试,它直接跑到第一个断点处,也就是第16行。然后用 n 逐过程调试,直到第20行也就是函数出现的那一行。进行 s 逐语句调试,可以看到从第20行进入了Sum函数,并且在函数中陷入了循环。
在单步执行的过程中我们可以直接按回车让调试一步一步往后走,因为在gdb中直接按回车键的含义是模仿上一步的动作。也就是说我们输入s之后,后面的单步调试就可以直接按回车,gdb会自己帮我们输入一个s。
在VS中有窗口选项来供我们时事查看变量的值的变化情况,这种选择在gdb中也有
display + 变量名 常显示该变量的值,每执行一次命令都会把这个变量的值打印出来
undisplay + 序号 关闭某个变量的常显示,这里也是要选择变量的序号而不是变量名
p + 变量名 暂时显示某变量的值
info locals 展示当前函数栈帧内所有变量的值

这里我给 i 变量用的是后置++所以它的值看起来有点怪
如果一个循环直接不停的循环不合适,因此gdb提供了在一个函数中向下跳转的功能。
until + 行号 跳转到某行

因为这个循环一直在7行和9行之间跳转,因此我们直接看看9行附近是什么,until出循环。
这里还展示了 p 命令的效果。
2.3 cgdb工具
上面就是命令行调试的基本操作了,但是gdb毕竟不能实时看到代码,还是太不方便了,于是我们可以使用cgdb工具,这个工具是将代码和命令行做了分屏和一定程度的可视化,相对gdb方便了许多。
安装cgdb工具:sudo yum install -y cgdb

可以看到这一整个界面还是非常清晰的,目前正在调试的行号会用绿色标注,打的断点会用红色标注。
其操作的命令是和gdb一样的。
2.4 其他调试命令
watch 监视某变量的值是否变化,watch也属于断点的一种,每次被触发都会停下来,可以用 d 删除
set var 变量=数值 在运行期间修改某变量的值
b 行号 if 变量==数值 新增条件断点,当变量等于某个数值的时候停下来
condition 断点号 变量==数值 在已有断点上追加条件断点
至此Linux操作系统的基本使用方法和所需工具讲解完了,后面我将在Lunix环境下从操作系统和网络两个方面继续学习。
相关文章:
Linux·权限与工具-git与gdb
1. git工具 git是一款软件,发明它的人同时发明了Linux操作系统,也就是大名鼎鼎的Linus Torvalds 林纳斯托瓦兹。后来人们把git软件包装,产生了github、gitee等平台。 git产生的初衷就是便于进行多人协同管理,同时它还可以用来将本…...
unity 如何 团队协作避免文件冲突?
在Unity团队协作中,避免文件冲突的关键在于版本控制、场景和Prefab的管理、以及沟通。以下是具体方法: 1. 使用版本控制系统 (VCS) Unity支持多个版本控制系统,如Git和Perforce。通过版本控制,每位团队成员可以独立工作&…...
VOC2007 的ImageSets/Main目录下通常有四个文件test.txt val.txt train.txt trainval.txt
在 VOC2007 的ImageSets/Main目录下通常有四个文件: test.txt:这个文件列出了用于测试的图像文件名。这些图像将在评估模型性能等测试阶段被使用。train.txt:此文件包含用于训练的图像文件名。在模型的训练过程中,程序会读取这些图…...
JavaScript中的parseInt(), Number(),+有啥区别?
文章目录 parseInt()Number()一元加号 处理 NaN 的常见方法1. 使用 isNaN() 函数检查值2. 使用 Number.isNaN() 方法3. 提供默认值4. 使用 try...catch 结构5. 使用类型守卫 在JavaScript中,parseInt(), Number(), 和一元加号 都可以用来转换值到数字类型ÿ…...
java核心基础
文章目录 1. Java开发基础1.1 DOS常用命令:(以MAC常用命令比较)1.2 JVM、JRE、JDK之间的关系1.3 Java开发环境的搭建1.4 Java的注释,标识符、标识符的命名规范1.5 变量和常量的定义及初始化1.6 Java的运算符1.7 三大语句1.8 常用的类1.8.1 ja…...
java 字符串如何通过占位符替换字符串
在Java中,可以使用String.format()方法或者MessageFormat.format()方法来通过占位符替换字符串。 例子1:使用String.format()方法 String str "Hello, %s! Today is %s."; String result String.format(str, "Alice", "Sun…...
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer,是一种实时…...
2024.9.24 数据分析
资料 111个Python数据分析实战项目,代码已跑通,数据可下载_python数据分析项目案例-CSDN博客 【数据挖掘六大项目实战】敢说这是全B站讲的最详细最通俗易懂的数据挖掘教程!整整60集!学不会来找我!-数据挖掘、数据挖掘…...
企业急于采用人工智能,忽视了安全强化
对主要云提供商基础设施上托管的资产的安全分析显示,许多公司为了急于构建和部署 AI 应用程序而打开安全漏洞。常见的发现包括对 AI 相关服务使用默认且可能不安全的设置、部署易受攻击的 AI 软件包以及不遵循安全强化指南。 这项分析由 Orca Security 的研究人员进…...
【深海王国】初中生也能画的电路板?目录合集
Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督为大家带来系列文章《初中生也能画的电路板》,帮你一周内快速入门PCB设计,手把手教你从元器件库添加、电路原理图绘制、…...
Java日期格式化注解@DateTimeFormat和@JsonFormat
DateTimeForma 这个注解主要用于处理从前端传递到后端的日期和时间数据。当你的 Spring 应用程序接收到一个 http请求,并且请求参数包含日期和时间数据时,DateTimeFormat 可以帮助你将这些数据解析为 Java Date 或 LocalDateTime 对象。 JsonFormat 这…...
阿里巴巴中国站商品详情API返回值的国际化支持
阿里巴巴中国站(通常指的是1688.com或淘宝、天猫等平台的API,但具体到商品详情API时,由于阿里巴巴的API体系庞大且不断更新,我无法直接提供一个特定于某个版本或接口的完整代码示例。不过,我可以给你一个概念性的指导&…...
TCP/IP - IP
目录 1. IPv4地址1.1. NAT技术2. IPv4数据报3. IP 分片与重组回见TCP/IP IP 网际互连协议(Internet Protocol)根据「IP地址」将数据传输到指定的目标主机,是一种 「不可靠」的 「端到端」的数据包 「传输服务」 所有的 TCP、UDP 及 ICMP 帧都以 IP 数据报格式传输。IP 协议…...
《JKTECH柔性振动盘:原理与多行业应用》东莞市江坤自动化科技有限公司
一、柔性振动盘的原理 柔性振动盘是一种新型的自动化上料设备,它采用先进的音圈电机技术和柔性振动技术,实现了对各种不规则形状、微小尺寸、易损伤零部件的高效上料和分拣。 其工作原理主要包括以下几个方面: 1. 音圈电机驱动 柔性振动盘内部…...
成功使用DDNS动态域名访问我的群晖NAS(TP-link路由器)
当NAS设备部署在动态IP环境中(如家庭或小型办公室宽带),远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题,结合神卓互联NAS公网助手提供的DDNS(动态域名服务)功能,我们可以轻松实现通过…...
MySQL GROUP BY 分区大小写问题解析
在数据库操作中,GROUP BY 是一个常用的SQL语句,用于根据一个或多个列的值对结果集进行分组。然而,在使用MySQL时,你可能会遇到一个常见问题:大小写敏感性。本文将探讨MySQL中GROUP BY的大小写敏感性问题,并…...
jQuery——jQuery的基本使用
1、使用 jQuery 核心函数:$ / jQuery 2、使用 jQuery 核心对象:执行 $()返回的对象 3、引入 jQuery 函数库:可以本地引入(不用联网),也可以远程引入(需联网)…...
使用vite+react+ts+Ant Design开发后台管理项目(三)
前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…...
AUTOSAR_EXP_ARAComAPI的5章笔记(11)
5.4.5 轮询和事件驱动处理模式 接下来,我们探讨服务提供方同时支持事件驱动和轮询行为的情况。从服务实例(此处指骨架子类实例)的角度来看,服务消费者的请求(包括服务方法或字段的 getter/setter 调用)可能…...
面经3——中和农信
今天参加了中和农信的面试,先进行60分钟的笔试,笔试完参加面试,面试官有两个人,面试了大概四十多分钟,因为没有亮点的项目,简历看起来十分单薄。现在来复盘一下。 笔试 事务ACID、事务隔离级别、乐观锁的…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
