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环境下从操作系统和网络两个方面继续学习。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络通俗理解学习笔记(3)注意力神经网络

Tansformer 什么是注意力机制注意力的计算键值对注意力和多头注意力自注意力机制注意力池化及代码实现Transformer模型Transformer代码实现BERT 模型GPT 系列模型GPT-1模型思想GPT-2模型思想GPT-3 模型思想 T5模型ViT模型Swin Transformer模型GPT模型代码实现 什么是注意力机制…

Linux基础开发环境(git的使用)

1.账号注册 git 只是一个工具,要想实现便捷的代码管理,就需要借助第三方平台进行操作,当然第三平台也是基于git 开发的 github 与 gitee 代码托管平台有很多,这里我们首选 Github ,理由很简单,全球开发者…

Redis - 深入理解Redis事务

目录 Redis是如何实现事务的?事务中执行的命令出现错误,会回滚事务吗?同一个连接可以重复开启事务吗?多个客户端同时开启事务会怎样?使用Redis事务只用MULTI和EXEC吗?Redis中的WATCH机制是怎么实现的&#…

UDP聊天室项目

代码思路 服务器 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h>…

JVM 调优篇7 调优案例1-堆空间的优化解决

一 jvm优化 1.1 优化实施步骤* 1)减少使用全局变量和大对象&#xff1b; 2)调整新生代的大小到最合适&#xff1b; 3)设置老年代的大小为最合适&#xff1b; 4)选择合适的GC收集器&#xff1b; 1.2 关于GC优化原则 多数的Java应用不需要在服务器上进行GC优化&#xff1…

ESP8266做httpServer提示Header fields are too long for server to interpret

CONFIG_HTTP_BUF_SIZE512 CONFIG_HTTPD_MAX_REQ_HDR_LEN1024 CONFIG_HTTPD_MAX_URI_LEN512CONFIG_HTTPD_MAX_REQ_HDR_LEN由512改为1024

02 基于STM32的按键控制继电器驱动电机

本专栏所有源资料都免费获取&#xff0c;没有任何隐形消费。 注意事项&#xff1a;STM32仿真会存在各种各样BUG&#xff0c;且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列&#xff0c;在PROTUES仿真里&#xff0c;32单片…

Games101图形学笔记——着色

Shading Z-buffering&#xff08;深度缓冲&#xff09; Shading&#xff08;着色&#xff09;画家算法Z-BufferShading(着色&#xff09;Blinn-Phong Reflectance Model&#xff08;布林冯反射模型&#xff09;漫反射能量守恒 着色高光Blinn-Phong Reflection ModelShadingFreq…

webGL 综合教程100+【目录】

webGL 综合教程100旨在为开发者提供两大方面的知识信息&#xff1a;&#xff08;1&#xff09;提供详细的每个api知识点的详解 &#xff08;2&#xff09;提供实战的示例&#xff0c;提供源代码。 在这量大系统性的知识下&#xff0c;给用户提供清晰的思路和示例参考&#xff0…

IEEE-754 32位十六进制数 转换为十进制浮点数

要将 IEEE-754 32位十六进制数 转换为 十进制浮点数&#xff0c;可以使用LabVIEW中的 Type Cast 函数。以下是一些具体步骤&#xff0c;以及相关实例的整理&#xff1a; 实现步骤&#xff1a; 输入十六进制数&#xff1a;在LabVIEW中&#xff0c;首先需要创建一个输入控制器&am…

传输层协议——udp/tcp

目录 再谈端口号 udp 协议 理解报头 udp特点 缓冲区 udp使用的注意事项 tcp协议 TCP的可靠性与提高效率的策略 序号/确认序号 窗口大小 ACK&#xff1a; PSH URG RST 保活机制 重传 三次握手(SYN) 四次挥手(FIN) 流量控制 滑动窗口 拥塞控制 延迟应答 捎带应答 面…

GPT撰写开题报告教程——课题确定及文献调研

撰写开题报告是一项复杂而重要的任务&#xff0c;需要涵盖从主题选择到文献综述、研究方法等多个环节。借助AI&#xff0c;如ChatGPT&#xff0c;可以显著提高这一过程的效率以及内容的质量。本文将详细探讨如何一步步利用ChatGPT撰写开题报告。 一、开题报告内容 一个清晰的…

[数据集][目标检测]智慧养殖场肉鸡健康状态检测数据集VOC+YOLO格式4657张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4657 标注数量(xml文件个数)&#xff1a;4657 标注数量(txt文件个数)&#xff1a;4657 标注…

基于SpringBoot的社区宠物管理与推荐系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 1.课题的基本内容&#xff0c;可能遇到的困难&#xff0c;提出解决问题的方法和措施 2.1课题的基本内容 本课题主要研究基于SpringBoot的社区宠物管理与推荐系统的设计与实现。用户注册登录系统前端后可以可以实现对宠物信息的…

保护您的隐私:隐藏 IP 地址的重要性

在当今的数字时代&#xff0c;我们的在线隐私和安全变得比以往任何时候都更加重要。浏览互联网时保护自己的一种方法是隐藏您的 IP 地址。 但是为什么要隐藏您的 IP 地址以及如何有效地做到这一点&#xff1f; 隐藏您的 IP 地址有助于保护您的在线匿名性。您的 IP 地址就像您的…

vscode技巧-eslint配置

开发环境 jsvue3axios 下载插件 Eslint、Prettfier 配置过程 1.配置eslint 进入settings&#xff0c;输入eslint&#xff0c;在settings.json中替换一下文件 // #每次保存的时候自动格式化 {"editor.codeActionsOnSave": {"source.fixAll.eslint": &…

低代码开发平台系统架构概述

概述 织信低代码开发平台&#xff08;产品全称&#xff1a;织信Informat&#xff09;是一款集成了应用设计、运行与管理的综合性平台。它提供了丰富的功能模块&#xff0c;帮助用户快速构建、部署和维护应用程序。织信低代码平台通过集成丰富的功能模块&#xff0c;为用户提供…

国产分布式数据库-tidb单机部署文档

tidb单机部署文档 1、创建用户 #创建用户 useradd tidb #设置密码 passwd tidb2、配置免密码登录 编辑/etc/sudoers文件,文末加入&#xff1a; tidb ALL(ALL) NOPASSWD:ALL如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时…

游戏各个知识小点汇总

抗锯齿原理记录 SSAA&#xff1a;把成像的图片放大N倍&#xff0c;然后每N个点进行平均值计算。一般N为2的倍数。比如原始尺寸是1000x1000&#xff0c;长宽各放大2倍变成2000x2000。 举例&#xff1a; 原始尺寸&#xff1a; 放大2倍后 最后平均值计算成像&#xff1a; MSAA&…

[OpenCV] 数字图像处理 C++ 学习——14霍夫变换直线、圆检测 附完整代码

文章目录 前言1.霍夫变换原理(1)霍夫变换检测直线的原理(2)霍夫变换检测圆的原理 2.代码实现(1)霍夫直线检测(2)霍夫圆检测 3.完整代码 前言 霍夫变换是一种有效的检测图像中的几何形状&#xff08;如直线、圆等&#xff09;的算法。霍夫变换通过将几何形状的检测问题转化为参…