Linux:开发工具(3)

news2024/11/16 22:34:18

一、版本控制器git

安装git指令

yum install git

 1.1 举例理解版本控制器

        举个例子:

       比方说老师要求我们交一份实验报告,而你的室友张三是一个非常勤奋的人,所以他很早就写好了第一版交给老师,但老师的要求很高,他觉得第一版不行,给了他一些修改意见,然后他在第一版的基础上写完第二版后,老师还是不满意,他又在第二版的基础上写出了第三版……就这样一直下去,当张三写到第八版的时候,老师发现他越改越差,还不如第二版,于是让张三交第二版就行,但此时张三就慌了,因为他一直在原来版本上修改,所以早就忘了第二版是什么样子的了。而你吸取了张三的教训,你也开始做实验报告,但是跟张三不同的是,每次老师给你打回来的时候,你都会将原先版本给保存一份然后再去修改,最后当老师想要第二版的时候,你就可以直接可以把第二版拿出来。(我在有意识地在保留前面的版本,因为可能未来会用到

         除此之外还有其他同学也要交实验报告,于是你想到了一个办法,你在老师办公室门口贴了一个告示“这个老师可能改到最后会需要之前的版本,你们可以加我微信,我给你们提供保存之前版本的服务”,于是乎很多同学开始加你的微信,然后你就开始给李四、王五、赵六……分别建了目录,他们会将旧的版本发给你保存,然后当他们需要的时候,找到你就可以找到之前的版本了。(说明许多人会存在这样的需求,可以提供相关的服务

       但是你的业务做得越来越大,你不断在复制和粘贴,不断有人找你索要之前的版本,你有点忙不过来了,于是你在思考:其实版本管理本质上不就是对文件进行重命名、拷贝等工作吗??那我能不能写一些软件来自动化这些无聊繁琐的工作??于是乎你写出了两个软件,一个是服务端负责版本管理,另一个是客户端负责给用户查看。然后你把两个软件合成了一个既可以做服务端也可以做客户端的软件(版本控制器的雏形开始出现了

        你给自己放置版本的地方起名叫做仓库,而当别人下载了你的软件之后,他如果在自己的电脑上做版本控制,那就是本地仓库,但是他可能会担心本地仓库的东西丢失,于是他又使用了你提供的云服务器,那就是远端仓库,然后推送到远端仓库。(所以git其实就是一款服务端和客户端为一体且具有网络功能的版本控制器,作用其实就是一种将客户的本地仓库和由你提供的云服务器上的远端仓库建立一个联系,帮助我们更好的版本管理和控制,远端仓库一般是大公司提供的云服务器,一般不会出问题,可以有效防止文件丢失

        其实实验报告都是有模版的,所以我们并不是非要每个人都写一份,可以是共同维护一份,这个操作就可以在远端进行(所以git还有一个作用就是方便多人协作) 

       以上的例子其实可以得到两点结论:

1、git是一款服务端和客户端为一体的具有网络功能的版本控制器

2、方便多人协作

       当然在现实中,其实例子中的老师就相当于是我们的产品经理,而学生就相当于程序员,一个团队里面产品经理需要去分析用户的需求,然后再分工给程序员去完成项目,但是客户的需求可能是会不断发生变化的,所以这也就意味着我们需要对每一个版本都进行有效的管理和保持。

 1.2 git究竟是如何诞生的 

        git的诞生其实也跟Linux的创始人雷纳斯托瓦斯有关系,其实Linux是一款操作系统,他的项目必然也是比较大的,所以当他开源之后,很多人开始写相关的代码,然后通过邮件等途径提交给他,他开始不断地进行重复的拷贝工作,但随着参与的人越来越多他开始忙不过来了,于是乎他开始把目光放到在市面上寻找一款软件能够进行自动化合并其他人代码并且更好地对Linux进行版本管理(一般来说即使是最顶尖的工程师,在遇到问题的时候第一反应不是自己要去做什么软件,而是市面上是否已经有更成熟的软件),但是当时市面上的版本控制器基本都是收费的,其实不是花不起这个钱,而是和开源精神不相符,其实主要是Linux的诞生的初衷就是为了让更多的人去使用和传播他,但是收费的版本控制器显然会阻挡一部分人去使用,收费的东西是不利于传播的。于是当时就有一个比较有情怀的公司,他们虽然是收费的,但是对Linux社区提供免费的服务,于是效率就开始变高了,他也成功解放了自己,不需要再去做一些枯燥的重复工作。但是由于写操作系统的人都是一些技术大佬,能力强好奇心重(也可能是因为他们发现版本控制器有漏洞,所以想要去破解源码解决问题),他们开始尝试去破解版本管理器的代码(因为这个版本管理器是别人公司用来赚钱的,所以提供给Linux社区使用的是加密的),于是乎这个公司的老板不就不爽了,觉得自己好心给你们免费使用,你们倒反而来破解我的软件,我的公司可都是靠着这个软件去生存的!!!于是乎这个老板就不让Linux社区用他的版本控制器了!!一刀两断

       于是乎又一夜回到解放前,吸取了这次的教训,他发现求人不如求己,于是乎他花费了几周的时间写了一段版本控制器的demo,把他像Linux一样开源出去,于是又一窝蜂去搞这个东西,于是很快,git就出现了!!!!

      但是git并不是所有人会去操作和使用的,所以有人就想能不能基于git这个工具去搞一个网站,就像以Linux内核开发出来的商业版centos和ubuntu一样,git也出现了他的商业化网站——github和gitee

1.3 git的使用(命令行用法)

1、新建仓库

2、找到对应的地址,把远端仓库拉取到本地(第一版斧头)

命令:git clone 地址 

然后你的文件夹里会多了一个对应的文件。 然后我们可以 ls -al可以看到全部的文件

3、 将本地仓库里的文件拷贝远端仓库

为了方便测试我们将一些代码统一放到一个testgit文件,然后进入当远端仓库目录进行拷贝

命令:cp ../testgit . -rf

4、add+commit (第二板斧)

命令 :git add . 

            git commit -m “说明”   (引号里的内容非常重要,是对我们文件的提交日志)

如上图,git的首次使用需要配置邮箱和用户名(为了追根溯源,方便找到这个代码的源头)

命令:git config --global user.email “你的邮箱”

           git config --global user.name “你的用户名”

5、push(第三板斧) 

命令 :git push

 需要输入用户名和密码

1.4 git的其他说明 

1、git log可以查看提交记录

2、git status可以查看当前目录的状态

如果我们创建一个新的文件夹test ,他会提示你当前test文件还没有托管到本地仓库(commit)

当你add+commit后,他会提示你当前文件已经托管到本地仓库了,但是还没同步到远端(push) 

然后你push之后就不需要做任何操作了

所以一般来说他会展示3种情况:(1)当前目录存在但是还没有托管到本地仓库的文件(2)已经托管到本地仓库的文件但是还没有同步到远端(3)不需要任何操作

3、 .gitignore可以忽视我们不想上传的文件

(1)其实就是一款配置文件,而里面的后缀的相关文件不允许被加入进去

(2)不要忘记“*”,这是一个通配符

(3)我们可以自己进行操作,把我们不想加入进去的文件对应的后缀写进去

4、可以删除仓库和清空仓库

二、Linux调试器gdb

安装gdb:yum install gdb

程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项(前期准备工作)!! 

 一些背景知识了解:一个公司想去独立完成一个项目,一般来说首先需要一个团队,需要产品经理+项目经理+若干程序员,由产品经理分析市场需求然后下发给项目经理,然后项目经理再将任务下发给其他程序员。而一般来说代码写出来之后还需要测试,可能是单独分配了一个测试人员给这个团队,也有可能测试是一个独立的部门,然后会将整个公司的代码都丢给这个部门去测试。一般来说我们遇到问题的时候首先考虑的是看看能不能直接通过代码逻辑去找到问题,然后其次可能会加入一些打印之类的测试代码,最后最后一般才会考虑使用gdb这些调试工具,因为使用这类调试工具最重要的就是定位错误,所以需要思考可能发生的各种错误然后去打断点定位调试,所以比较麻烦,但作为程序员还是需要去掌握的!!!

命令:gdb 可执行程序 

 1、有关代码展示

list(l) 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

list(l) 函数名:列出某个函数的源代码。

       如果我们想要展示所有的代码,可以先l 0,然后因为gdb是有记忆的,所以可以不断回车就会慢慢打印出所有的代码

 2、有关程序运行

r或run:运行程序(默认会直接结束或者跳到下个断点)

n 或 next:把函数当成一个语句(逐过程)

s或step:不会跳过代码块(逐语句)

 3、有关断点

break(b) 行号:在某一行设置断点

break(b) 函数名:在某个函数开头设置断点

info(i) break(b) :查看断点信息。

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

设置并查看断点 

当你调试过后,他还会显示调试痕迹 

 我们也可以根据序号去删除断点

 还有一种场景,比方说我们有3个断点,然后我确认了第2个断点没什么问题,但是我不想删掉第二个断点(为了保留调试痕迹),所以就可以使用disable去禁用断点

4、关于控制变量

p 变量:打印变量值。

set var:修改变量的值

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay:取消对先前设置的那些变量的跟踪

breaktrace(或bt):查看各级函数调用及参数

info(i) locals:查看当前栈帧局部变量的值

可以在运行中打印出我们想查看变量的值,也可以强制修改(间接可以帮助我们快速跳出循环) 

 

display就可以让我们一直跟踪这个值,每次都打印出来

i locals直接查看当前栈帧的所有局部变量的值

 bt直接查看当前函数的调用情况,以及栈帧(方便我们看到整个调用链)

5、有关跳转定位 

调试80%都是围绕定位展开的,因为要根据错误的上下文信息去修改错误。

finish:执行到当前函数返回,然后挺下来等待命令(走到该函数最后)

until X行号:跳至X行(方便我们快速跳出循环)

continue(或c):从当前位置开始连续而非单步执行程序(帮助我们从当前断点直接跳到下一个断点)

run(或r):从开始连续而非单步执行程序(向下运行程序)

6、有关退出

quit(q):退出gdb  

 

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

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

相关文章

将 github 仓库同步到个人服务器

场景 把本地项目推送到Github仓库后,如果想部署到服务器上,可以尝试此方案 我的博客是hugo搭建的,每次更新文章会手动推送到Github仓库, 然后利用Actions 脚本自动推送到cf或者vercel 之前我写过一篇 将 hugo 博客搬迁到服务器…

STM案例一:灯闪烁

一、使用元件 STlink,STM32F103C8T6 二、接线方法 STM32与STLINK的接线方法为: GND-->GND DCLK-->SWCLK DIO-->SWDIO 3.3-->3.3V 三、配置调试器 选择魔术棒按钮,单击Debug,选择ST-link Debug,选…

免费JSON在线解析工具网址

1,https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2,https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

阿卡迈2.0逆向

阿卡迈(akamai)我也是第一次第一次搞 阿卡迈检测挺多例如 ua 屏幕 document 自动化检测等等 ,还有tls指纹 仅供学习参考吧 当cookie的_abck为 0表示通过,1表示不通过!!! 测试了两个2.0站全都通…

一款特别牛逼还免费的屏幕演示批注注释工具,教学演示工具

功能强大,还免费!PEVO Annotator 是一款功能强大的屏幕标注软件,广泛应用于教学演示、屏幕录像等场景。该软件支持多种操作系统,包括 macOS 和 Windows 。它提供了丰富的工具和功能,如画笔、直线、圆形、方形等形状绘制…

【海思3516DV500 | 开发环境】编译整个SDK全过程以及问题汇总

一、开发环境 上表是海思提供的Hi3519DV500 开发环境的各部分软件描述,实际用起来你就知道,可能有出入,尝试换Ubuntu 20.04折腾了好几天都不行,使用推荐的Ubuntu 18.04.2 64bit一个上午就行。 基本的硬件要求如下: ●…

Qt 解析多级XML

补充笔记:Qt 史上最详细 - “操作XML文件” - 笔记 一、如下图为XML文件 annotation为根节点, first第一节点,second第二节点,third第三节点。 二、实现解析xml文件,并将解析数据用QTreeView显示,实现代码…

AD9161调试问题

AD961同步信号SYNC无法保持高逻辑电 现象 配置ADF4351时钟芯片使其产生频率为1.6GHz的时钟为AD9161提供工作时钟,JESD的线速率配置为8Gbps,并配置AD9161的寄存器使其工作在2x内插模式以实现IQ信号的模数转换模式。同时根据AD9161芯片手册对ADF4351提供的…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢? 1.3 RDBMS和NOSQL的特点及优缺点: 二 Remote Dictionary Server 简介(redis) 2.1 什么是redis …

如何使用ssm实现物资进销存jsp

TOC ssm263物资进销存jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的…

JavaScript学习文档(4):循环结构、初识数组、数组案例、操作数组

目录 一、循环结构 1、for语句 2、for循环案例 3、for循环嵌套及案例 4、while语句 5、continue关键字 6、break关键字 二、初识数组 1、什么是数组 2、为什么要数组 3、数组的基本使用 三、数组案例 1、数组求和及平均值 2、数组求最大值和最小值 四、操作数组…

做集运初期到底要不要上系统?

在集运业务的起步阶段,很多老板都会有这样的疑问:“我的包裹量还不多,真的需要投入资金和时间来上系统吗?”这个问题听起来合理,但实际上却忽视了业务发展中更为重要的几个方面。 1.用户体验:服务的核心 首…

C语言经典案例分享

题目:输入三个整数 x、y、z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,然后再用 x 与 z 进行比较,如果…

NVIDIA Jetson AGX Orin源码编译安装CV-CUDA

目录 1 下载源码并配置 2 编译安装CV-CUDA 2.1 安装相应依赖包 2.2 升级gcc到gcc-11 2.3 build 2.4 升级cmake 2.5 再次build 2.5.1 报错 /usr/include/c/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’: 3 直接使用安装包 参考…

力扣: 两两交换链表中的节点

文章目录 需求代码代码解释结尾 需求 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:…

jmeter性能测试之CSV 数据文件设置

文章目录 业务场景使用步骤步骤1:准备数据步骤二: 编写csv文件步骤三:添加CSV 数据文件设置步骤四:定义接口,选择文件上传,文件名称通过“浏览”添加即可 业务场景 有一个文件上传的接口,希望每个线程上传不同的文件(比…

FOFA搜索引擎的语法

FOFA 是一款网络空间搜索引擎,允许用户通过自定义查询语法来检索全球范围内的互联网资产。FOFA 提供了丰富的语法,可以帮助用户筛选目标。以下是 FOFA 语法的基本介绍: 1. 基本语法格式 FOFA 的查询语句遵循以下格式: 字段&quo…

MVVM分层思想

M:Model数据模型 V:View视图 VM:ViewModel视图模型 Vue也是借鉴了MVVM的思想 在Vue中,M就是data,V指挂载点,而Vue实例本身就是一个VM <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X…

前端手写源码系列(二)——手写call、apply、bind

手写源码系列目录 一、作用二、手写call方法三、手写apply方法四、手写bind方法五、三者区别applycallbind小结 一、作用 call、apply、bind作用是改变函数执行时的上下文&#xff0c;简而言之就是改变函数运行时的this指向 那么什么情况下需要改变this的指向呢&#xff1f;下…

Spring Boot启用GZIP压缩

1.为什么是需要gzip压缩&#xff1f; 经常我们都会与服务端进行大数据量的文本传输&#xff0c;例如 JSON 就是常见的一种格式。通过 REST API 接口进行 GET 和 POST 请求&#xff0c;可能会有大量的文本格式数据提交、返回。然后对于文本&#xff0c;它有很高的压缩率&#x…