Linux学习:git补充与调试工具gdb

目录

  • 1. git版本控制器(续)
    • 1.1 git本地仓库结构
    • 1.2 git实现版本控制与多人协作的方式
    • 1.3 git相关指令,多分支模型与.gitignore文件
  • 2. gdb调试工具
    • 2.1 企业项目开发流程简述与调试的必要性
    • 2.2 bug的调试思路方法与调式工具的使用

1. git版本控制器(续)

1.1 git本地仓库结构

  1. 在前面的学习中,我们进行了git工具的安装,代码仓库的创建,代码的提交。经过初步了解已经能够使用git工具进行编写代码的线上提交与存储,以此,来实现对我们编写代码的管理与维护。
  2. 我们知道,想要进行代码的线上存储,需要通过gitee/github网站创建属于自己的账户并创建相应的线上仓库,创建好仓库之后,通过对应仓库的链接,将线上仓库拉取克隆至本地。后续,我们将需要进行提交管理的代码创建或拷贝至拉取下来的本地仓库,再进行本地仓库内容的上传即可完成管理。
  3. 将本地仓库的更改添加同步至线上仓库,我们需要进行三步git addgit commitgit push,那么,这三条指令对应进行的操作是什么,为什么要进行这样的操作才能将代码上传,在解决这两个问题之前,我们先来了解一下git本地仓库的结构。

在这里插入图片描述

  1. 当我们下拉线上创建的仓库时,会在本地生成一个与服务器上一样的仓库,我们想要将自己编写的代码进行上传时,必须要将编写的代码拷贝或直接创建至本地仓库中。
  2. 经过步骤1的操作后,我们的代码仍不能直接上传,需要经过git add的指令,先将代码添加至仓库的暂存区中。
  3. 代码进入暂存区后,并没有真正地被纳入版本记录中,需要我们经过进一步操作git commit命令,确认要将代码添加,此步骤可以通过-m选项对调整的内容进行注释。此时,代码才会被记录到历史地修改记录中为此项目添加一个新的历史版本。到这一步,我们已经完成了修改内容在本地的添加。
  4. 最后一步,我们要真正实现代码的线上管理,是需要将本地的代码存储到线上的,所以还需将线上仓库的内容与做出调整的本地仓库进行同步,指令git push

1.2 git实现版本控制与多人协作的方式

  1. git工具配合线上仓库可以存储所有提交调整的历史代码版本,当开发过程中遇到问题需要进行版本回退,我们可以在线上仓库中找到需要的历史版本并进行代码的拷贝。
  2. 一份线上仓库可以有多个对应的本地仓库,因此,可以多人共用一个线上仓库进行同一项目的并行开发。并行开发的方式会导致每个人的本地仓库中的代码都不一样,而如果不进行处理直接提交,就会发生版本混乱。
  3. 对于这一问题,git采取了线性提交的方式来解决,即每当我们想要进行代码的线上提交时,如果线上仓库已经经过了版本更新,我们必须先使用git pull指令,拉取线上仓库将,线上仓库的内容同步至本地仓库,进行版本统一。经过这一步骤后,我们才能进行代码的提交与线上仓库的更新。

1.3 git相关指令,多分支模型与.gitignore文件

1. git相关指令

  1. 指令:git log
    指令意义:查看git的提交记录

在这里插入图片描述

  1. 指令:git status
    指令意义:查看git本地仓库工作区与缓存区中内容的差别
  1. 指令:git branch
    指令意义:查看当前git仓库的分支模型

在这里插入图片描述

  1. 指令:git rm
    指令意义:删除工作区的文件
  1. 指令:git rm -f
    指令意义:当我们将代码添加至暂存区中后,我们使用普通的rm指令无法将暂存区中的文件删除,此指令可以一同删除工作区与暂存区中的文件。(删除暂存区与工作区的文件)

2. 多分支模型

  1. 在大型公司的企业开发中,会有众多项目,将所有项目仓库都放置在一起进行版本管理与开发,会导致管理混乱,开发效率变低。
  2. 因此,git提供了多分支线上仓库的模型,按照项目完备性,稳定性将项目分别放置在不同的仓库分支上,初步的开发放置在一条分支上,经过测试调整一步一步,将待项目成熟后将其添加到下游分支上。

在这里插入图片描述

3. .gitignore文件

  1. 很多时候我们在本地仓库中创建的项目包含很多我们不需要管理上传的文件,如目标文件.obj,可执行程序.exe等等。这类文件不但没有进行管理的意义,还会占用我们线上仓库的空间。
  2. 为了能够实现只对需要源文件的管理,我们可以在本地仓库中的隐藏文件.gitignore文件中,声明添加我们不需要提交维护的文件类型。这样每次提交时,git都会忽略我们在此配置文件中声明的文件,这样不仅节省了线上的空间,还提高了我们对代码的管理维护效率。
  3. .gitignore文件中声明须忽略文件类型的方式:*.[文件后缀]*为通配符,这样的声明方式即为所有以指定后缀结尾的所有文件。

2. gdb调试工具

2.1 企业项目开发流程简述与调试的必要性

  1. 项目开发的大致流程:

在这里插入图片描述

  1. 在代码开发的流程中,开发人员进行项目各个功能模块的编写时,必须要借助调试工具,经过反复自测调试,调整才能完成代码的编写。因此,熟练使用调试工具拥有良好的调试能力对于开发是非常有必要的。
  1. 可执行程序的debug与release版本
    <1> 可执行程序分为debug版与release版,这两种执行程序的使用场景与使用对象是不同的。
    <2> debug版本的可执行程序其具有调试信息,是开发人员用来测试程序功能的测试版本。
    <3> release版本的程序是发布版本,其相较于debug版本的程序体积更小,有着诸多优化是给用户直接使用的成熟产品。
    <4> 可执行程序也具有格式(ELF),并不只是可运行二进制指令的堆砌。
    <5> 我们在Linux操作系统下,使用gcc/g++编译器产生的可执行程序默认是release版本,我们无法进行调试,若想生成debug版本的程序需要给编译指令添加参数选项,指令为gcc -o [生成可执行程序名] [源文件] -g

2.2 bug的调试思路方法与调式工具的使用

  1. 代码的调试是为了找出解决程序出现的漏洞错误,因此,我们调试就是要精准快速的找出问题出现的代码处,而调试工具所要做到的就是帮助我们更好更快的完成这一目标。
  2. 在windows操作系统下,我们使用的编程工具集成化开发环境vs,其自带有对代码调试的功能。vs的调试模块借助图形化界面的方式与诸多的调试功能使得我们对代码调试的效率大大提升,那么,Linux操作系统下有类似的调试工具吗,此调试工具的功能与使用方式与vs相同吗。

1. VS的调试功能

  1. 可运行:可以将程序运行,将程序运行才能暴漏出问题
  2. 代码可见:在运行的过程中可以看到代码,且能够看到程序执行到代码中的哪一句
  3. 断点:程序执行的停止处
  4. 局部调试:可以只进行一部分代码的单独调试
  5. 可监视信息:可以查看局部变量的内容与地址
  6. 调用栈:可查看程序中函数的调用栈及其关系
  7. 单步执行:可以进行程序代码的逐句执行,细致精确的确定问题出处
  8. 进入函数:能够进入程序里调用的函数中,查看函数内部的代码

2. 调试工具gdb的使用

  1. Linux操作系统中也有着自己的调试工具,在我们通过编译器编译出debug版本的可执行程序后,我们可以借助其完成对程序调试,其调试功能与vs中的调试模块类似。

gdb指令:运行

  1. 进入调试模式,指令:gdb [可执行程序名]
  2. 从指定行开始查看代码,指令:l n(行号)
  3. 运行代码,指令:r(run)

gdb指令:断点相关操作

  1. 在指定行处打断点,指令:b(break) n (行号)
  2. 在指定函数首部打断点,指令:b [函数名]
  3. 查看当前存在的断点信息,指令:info b
  4. 使指定断点失效,指令:disable n(断点编号)
  5. 恢复断点,指令:enable n(断点编号)
  6. 删除所有断点,指令:delete breakpoints
  7. 删除指定断点,指令:delete breakpoints n(断点编号)

在这里插入图片描述

gdb指令:单步调试

  1. 逐过程调试,不进入函数,指令:n
  2. 逐语句调试,进入函数,指令:s(step)
  3. 从一个断点运行到下一个断点,指令:c(continue)
  4. 将程序跳转至指定行,指令:until n(行号)

gdb指令:信息查看

  1. 常显示变量,指令:display [变量名]
  2. 取消常显示的变量,指令:undisplay n(变量编号)
  3. 显示变量的值和地址,指令:p [变量/地址]
  4. 查看调用的堆栈,指令:bt

gdb指令:运行逻辑控制

  1. 将当前函数运行结束,指令:finsh
  2. 调试中改变分支语句判断变量的值,查看不同分支的执行结果,指令:set var [变量]=[值]

补充:

  1. 退出gdb调试,指令:q(quit)快捷键 Ctrl + d
  2. gdb调试中,会记录进行的最近指令,再次回车确认时会执行最近一次输入的指令
  3. 调试的思路步骤:
    <1> 初步大致查找
    <2> 确定出错的范围,缩小范围
    <3> 在出错范围中进行局部的逐行查找

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目标检测---IOU计算详细解读(IoU、GIoU、DIoU、CIoU、EIOU、Focal-EIOU、SIOU、WIOU)

常见IoU解读与代码实现 一、✒️IoU&#xff08;Intersection over Union&#xff09;1.1 &#x1f525;IoU原理☀️ 优点⚡️缺点 1.2 &#x1f525;IoU计算1.3 &#x1f4cc;IoU代码实现 二、✒️GIoU&#xff08;Generalized IoU&#xff09;2.1 GIoU原理☀️优点⚡️缺点 2…

深入理解Java中的TCP连接:三次握手和四次挥手

欢迎来到我的博客&#xff01;今天我们将一起探索网络通信的奥秘。在Java编程中&#xff0c;我们经常会涉及到网络通信&#xff0c;而TCP协议是实现可靠数据传输的重要协议之一。在建立TCP连接和断开连接的过程中&#xff0c;三次握手和四次挥手是至关重要的步骤。本文将深入探…

rt-thread(5.0版本)之sfud组件的使用问题记录(w25q128存储模块)

前言 记录一下5.0版本时使用官方推荐的函数与底层驱动存在的不兼容问题 相关宏定义 // -----------------------------SPI 组件 #define RT_USING_SPI #define RT_USING_SFUD #define RT_SFUD_USING_SFDP #define RT_SFUD_USING_FLASH_INFO_TABLE #define RT_SFUD_SPI_MAX_HZ…

生骨肉冻干喂养有哪些优点?对猫身体好的生骨肉冻干分享

随着科学养猫知识的普及&#xff0c;生骨肉冻干喂养越来越受到养猫人的青睐。生骨肉冻干不仅符合猫咪的饮食天性&#xff0c;还能提供均衡的营养&#xff0c;有助于维护猫咪的口腔和消化系统健康。很多铲屎官看到了生骨肉冻干喂养的好处&#xff0c;打算开始生骨肉冻干喂养&…

ES 常见面试题及答案

目录 es 写入数据流程 es 删除数据流程 es 读数据流程 es 部署的服务有哪些角色 es 的实现原理 es 和lucence 关系 如何提高写入效率 提高搜索效率 es doc value指的啥 分片指的啥&#xff0c;定义后可不可义再修改 深分页如何优化 对于聚合操作是如何优化的 元数据…

微服务高级篇(二):分布式事务+Seata架构

文章目录 一、分布式事务理论基础1.1 CAP定理1.2 BASE理论 二、初始Seata2.1 Seata的架构2.2 部署TC【事务协调者】服务2.3 微服务集成Seata 三、实践3.1 XA模式3.1.1 原理3.1.2 实现 3.2 AT模式3.2.1 原理3.2.2 脏写问题以及解决方案【全局锁超时处理】3.2.3 实现 3.3 TCC模式…

机器人路径规划:基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(提供Python代码)

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的&#xff0c;因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始&#xff0c;采用贪心算法的策略&#…

【漏洞复现】Progress Kemp LoadMaster 命令注入漏洞(CVE-2024-1212)

0x01 产品简介 Progress Kemp LoadMaster是一款高性能的应用交付控制器&#xff0c;具有可扩展性&#xff0c;支持实体硬件和虚拟机的负载均衡。它提供了当今应用服务所需的各种功能&#xff0c;包括深度用户验证、资安防护&#xff08;如WAF/IPS/DDoS防护&#xff09;以及零信…

Cannot run program “C:\Program Files\Java\jdk-17\bin\java.exe“

错误提示&#xff1a;Cannot run program “C:\Program Files\Java\jdk-17\bin\java.exe” 解决办法&#xff1a; 检查环境变量是否配置是否正确检查项目环境是否正确&#xff0c;可能会出现多个JDK版本&#xff0c;将不需要的删除

Spring Cloud(Finchley版本)系列教程(四) 断路器(Hystrix)

Spring Cloud(Finchley版本)系列教程(四) 断路器(Hystrix) 为了更好的浏览体验&#xff0c;欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 一、断路器Hystrix hystrix是Netlifx开源的一款容错框架&#xff0c;防雪崩利器&#xff0c;具备服务降级&#xff0c;…

如何实现在固定位置的鼠标连点

鼠大侠的鼠标连点功能是免费的 浏览器搜索下载鼠大侠&#xff0c;指定连点间隔和启动快捷键 点击设置&#xff0c;指定点击位置

2024年熔化焊接与热切割证模拟考试题库及熔化焊接与热切割理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年熔化焊接与热切割证模拟考试题库及熔化焊接与热切割理论考试试题是由安全生产模拟考试一点通提供&#xff0c;熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材&#xff0c;熔化焊接与热切割大…

部分字符函数与字符串函数的讲解

说到字符函数&#xff0c;我们见过很多&#xff0c;比如strlen&#xff0c;strcpy&#xff0c;strcat...... 这时候就会有人说还有sizeof&#xff0c;其实sizeof不是库函数&#xff0c;他其实是操作符 但是你听说过以下库函数么&#xff1f; 所以说字符串的函数有很多&#xff…

Photomator:专业级照片编辑的利器

Photomator软件是一款功能强大的照片编辑和管理工具&#xff0c;专注于提供高质量的图像处理体验和便捷的工作流程。以下是关于Photomator软件功能特色的详细介绍&#xff1a; 高级颜色调整功能&#xff1a;Photomator提供了大量前沿的颜色调整工具&#xff0c;包括AI驱动的自…

【数据结构】单链表详解

前言 为了解决顺序表存在的一些问题&#xff0c;我们引入了单链表~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 顺序表存在一定的问题 与顺序表的对比 认识链表 链表结构 打印节点 头文件SList.h 源…

opencv安装(C++)并配置vs

准备工作&#xff1a; 1.opencv安装包(此教程使用4.9) 2.visual studio(此教程使用vs2019) opencv安装&#xff1a; 1、下载opencv&#xff1a; 1.1 官网下载&#xff1a;Releases - OpenCV 1.2 百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1NpEoFjbbyQJtFD…

HANA VIEW 用 ABAP 创建CDS VIEW,在生成ODATA

这里我们做ADT来创建 场景介绍:把hana中的一个底表,创建成ABAP的 CDS VIEW ,在把CDS VIEW 生成 OData 服务。 一、创建CDS Table Function 红框内根据自身情况填写 选择 Define Table Function with Parameters 创建 Data Definition 完整代码,定义 结构 , 也可以定义参…

基于springboot+vue的火锅店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

javaSwing推箱子游戏

一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力&#xff0c;使人们暂时忘却生活当中的烦恼&#xff0c;增强人们的逻辑思维能力&#xff0c;游戏的艺术美也吸引着越来越多的玩家和厂商&#xff0c;寓教于乐&#xff0c;在放松人们心情的同时还可以活跃双手。在人类…

支小蜜校园防欺凌系统怎么识别到学生打架?

校园欺凌行为已经成为一个全球性的社会问题&#xff0c;它不仅影响了学生的身心健康&#xff0c;也破坏了校园的和谐氛围。为了有效预防和应对这一现象&#xff0c;许多学校开始引入校园防欺凌系统。那么&#xff0c;校园防欺凌系统是如何识别到学生打架的呢&#xff1f;本文将…