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.xdnf.cn/news/1538146.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

GB/T28181-2022相对老版本有哪些变动?

GB/T28181-2022新版概述 GB/T28181-2022是《公共安全视频监控联网系统信息传输、交换、控制技术要求》的国家标准,该标准在2022年12月30日发布,并于2023年7月1日正式实施。以下是关于GB/T28181-2022的详细解析: 一、标准概述 GB/T28181-20…

2024/9/18 模型的存储与读取

一、模型的存储与读取 主要涉及到torch.save和torch.load函数 新建两个python文件: 1.在model_save文件中保存模型(方式一)和模型参数(方式二) 2.在model_load文件中读取模型(方式一)和模型参数并装载模型(方式二)

海外绿色农业果蔬投资系统可以二开多语言

食品安全已经是全球非常重视,关于农业方面的基础建设投资都在大力推进,做一个绿色农业果蔬投资是一个非常不错的。希望这个系统能对你有很大的帮助!

三菱变频器变更电流最大输入(20mA 初始值)时的频率(60Hz初始值)

变更最高频率。变更示例 在4~ 20mA 输入频率设定器中,将 20mA 时的频率从 60Hz(初始值)变更为 50Hz。 输入 20mA 电流时调整为输出 50Hz。 将Pr.126 设定为“50Hz” NOTE 4mV 时的频率设定可通过校正参数 C5 设定。 其他的频率设定电流增益的调整方法,还…

泛微E-Mobile client/cdnfile 任意文件读取漏洞复现

0x01 产品简介 泛微E-Mobile是一款由泛微网络科技股份有限公司开发的移动办公产品,该产品专门为手机、平板电脑等移动终端用户设计,旨在提供便捷、高效的移动办公体验。适用于企业高管和有移动办公需求的业务部相关员工使用,特别适合于已有内部OA系统的大中型企业机构,尤其…

HBuilder无法打开微信开发者工具

配置微信开发工具路径之后,HBuilder无法打开微信开发者工具 使用HBuilder打开微信开发者工具的配置,官网有 运行至微信模拟器控制台报错 这个时候就需要打开微信开发者工具进行安全设置了

国外问卷调查怎么做的,新手怎么开始?

既然你准备进入这个行业,就应该明白一件事:这个项目,本质就是网络搬砖。 也就是你搬的越多、越快,就赚得越多。 做一份问卷,比如2美元,做50份,就是100美元,也就是700元左右。 月入…

好用的超声波清洗机有哪些?精选四大爆款品牌汇总

随着时代的发展及生活水平的提升,珠宝饰品、眼镜等个人物品日益普及至千家万户。然而,这些贵重小物在日常存放中难免会积累微尘与隐形细菌,无形中可能对我们的健康产生潜在影响。鉴于细菌的微小难察,超声波清洗机应运而生&#xf…

C++:日期类的实现

目录 一、前言 二、头文件 三、各个函数的实现 打印、检查日期及获取日期 、、-、-、 、<、<、>、>、 &#xff01; 日期-日期 >>、<< 一、前言 前面几篇讲了关于类和对象的一些知识&#xff0c;本篇就来实现一下前面用到的日期类。 二、头文…

Linux文件IO-基础知识了解及文件描述符

1、简介 本章给大家介绍 Linux 应用编程中最基础的知识&#xff0c;即文件 I/O&#xff08;Input、Outout&#xff09;&#xff0c;文件 I/O 指的是对文件的输入/输出操作&#xff0c;说白了就是对文件的读写操作&#xff1b;Linux 下一切皆文件&#xff0c;文件作为 Linux 系…

付费流量如何有效撬动自然流?

付费流量能够有效撬动自然流量的情况主要有三种。 首先&#xff0c;当直播刚开始时&#xff0c;流量通常较为泛化&#xff0c;转化效果不理想。在这种情况下&#xff0c;借助付费流量圈选精准受众&#xff0c;可以显著提高转化率。一旦形成转化&#xff0c;系统会根据这些转化行…

怎么使用Chrome与C++实现高效自动化测试

在软件开发过程中&#xff0c;自动化测试是确保代码质量和稳定性的关键步骤。谷歌浏览器&#xff08;Chrome&#xff09;提供了强大的开发者工具和丰富的API&#xff0c;结合C的强大功能&#xff0c;可以实现高效的自动化测试。本文将介绍如何使用Chrome和C来实现这一目标。&am…

vue2使用npm引入依赖(例如axios),报错Module parse failed: Unexpected token解决方案

报错情况 Module parse failed: Unexpected token (5:2) You may need an appropriate loader to handle this file type. 原因 因为我们npm install时默认都是下载最新版本&#xff0c;然后个别依赖的版本太新&#xff0c;vue2他受不起这个福分。 解决方法 先去package.js…

Rasa对话模型——做一个语言助手

1、Rasa模型 1.1 模型介绍 Rasa是一个用于构建对话 AI 的开源框架&#xff0c;主要用于开发聊天机器人和语音助手。Rasa 提供了自然语言理解&#xff08;NLU&#xff09;和对话管理&#xff08;DM&#xff09;功能&#xff0c;使开发者能够创建智能、交互式的对话系统。 1.2…

数据驱动新时代:数据飞轮如何唤醒中台潜能

前言 随着数字化转型浪潮的不断高涨&#xff0c;数据已跃升为企业战略蓝图中不可或缺的核心资产。为了更有效地整合与利用来自内外部的海量数据资源&#xff0c;众多企业纷纷着手构建数据中台&#xff0c;以期实现数据的集中管理、高效共享以及基于数据的精准业务决策。然而&a…

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

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

构建 LLM 应用程序时经常遇到的高级概念的快速指南

使用案例 数据支持的 LLM 应用程序有无数的用例&#xff0c;但大致可以分为四类&#xff1a; 结构化数据提取 Pydantic 提取器允许您指定要从数据中提取的精确数据结构&#xff0c;并使用 LLM 以类型安全的方式填充缺失的部分。这对于从 PDF、网站等非结构化来源中提取结构化…

cdr怎么画虚线?

虚线是以点或者短线画成的断续的线&#xff0c;多用于几何图形或者标记。我们在平常学习工作中经常使用标记的方式。根据国标制图规定 机械制图 图样画法 图线规定&#xff0c;技术图样中&#xff0c;主要使用细虚线和粗虚线两种&#xff0c;细虚线用以表示不可见棱边线和不可见…

使用高版本nodej报错:node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found

如果要更新GLIBC_2.27会很繁琐&#xff0c;且耗时较长&#xff0c;所以建议下载带glibc的版本的nodejs 解决方案&#xff1a;下载带glibc的版本安装&#xff0c;如果是使用nvm则解压到对应的版本控制路径 我使用的版本是v20.16.0&#xff1a;Index of /download/release/v20.1…

apk反编译修改教程系列-----修改apk 去除软件加固状态 实例操作步骤解析_1【二十七】

上期博文我们基本了解了apk的一些加固方面的常识。了解了加固的一些手段与 列举了加固检测的方法。其实对于初学者来说。这些常识了解一下即可。具体还是要实际应用。今天将陆续以实例操作来演示有些apk应用去加固的步骤。尽量步骤详细到每一步方便对照操作。 通过博文了解 1…