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

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(), 和一元加号 都可以用来转换值到数字类型&#xff…...

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 函数库:可以本地引入(不用联网),也可以远程引入(需联网&#xff09…...

使用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、事务隔离级别、乐观锁的…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...