Linux·权限与工具-git与gdb

news/2024/9/19 20:10:01 标签: linux, git

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.niftyadmin.cn/n/5664442.html

相关文章

电脑实时监控软件有哪些?七个电脑屏幕监控软件任你选择

电脑实时监控软件种类繁多,每款软件都有其独特的功能和适用场景。 以下是七个备受推荐的电脑屏幕监控软件,供您选择: 1.安企神: 功能:它是一款国内领先的企业级电脑监控解决方案, 提供实时屏幕监控、 文…

ASP.NET Core中的多环境配置与管理实践

在ASP.NET Core应用程序开发中,管理不同环境下的配置是至关重要的。ASP.NET Core 提供了一种灵活的方式来根据当前运行环境自动加载相应的配置文件。下面,我们将通过代码示例详细说明如何在ASP.NET Core项目中实现多环境配置管理。 1. 设置环境变量 首…

方法引用(Java)

把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体 1.引用处必须是函数式接口 2.被引用的方法必须已经存在 3.被引用的方法形参的返回值需要跟抽象方法保持一致 4.被引用方法的功能要满足当前需求 package function;import java.util.Arrays;public cl…

【MySQL】MySQL连接池原理与简易网站数据流动是如何进行

一、MySQL连接池 我们在基础I/O中学习了线程池,因此,我们可以将MySQL引入线程池中。如果在实际业务中出现频繁连接数据库的情况时,我们需要创建一些线程,然后通过线程来创建MySQL的连接。在每一个线程中,我们线程启动前…

Netty笔记01-Netty的基本概念与用法

文章目录 1. 概述1.1 Netty 是什么?1.2 Netty 的特点1.3 Netty 的作者1.4 Netty 的地位1.5 Netty 的优势1.6 Netty 的工作原理1.7 Netty 的应用场景1.8 Netty 的重要组件 2. 第一个程序2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理💡 提示 1. 概述 1.1 …

【Android】ViewPager

1.ViewPager的简介和作用 ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view,用于允许用户在几个页面(或称为碎片)之间左右滑动切换。它通常用于创建像画廊或轮播图那样的用户体验。 ViewPager类直接继承了…

springboot家政服务管理系统—计算机毕业设计源码34242

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…

SDI 国产芯片,可提供国产证明视频均衡驱动器,SDI产品系列

视频均衡驱动器,功能仿制 TI公司 LMH0387产品。本期间支持 DVB-ASI,作为驱动器能够选择输出速率,作为均衡接收器能支持100m 以上传输距离(线缆类型 Belden1694A)。 工作温度范围:-40℃~85℃:a) 电源电压:3.14V~3.46V: 驱动器输出信号:单端 CML 信号: 均衡器输出信号:LVDS 电平…