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> 在出错范围中进行局部的逐行查找

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

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

相关文章

软考高级:特定领域软件架构(DSSA)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

linux网络固定ip的方式

1. 注意 默认情况下&#xff0c;我们linux操作系统 ip 获取的方式是自动获取的方式&#xff08;DHCP&#xff09;&#xff0c;自动获取在我们需要进行集群配置的时候&#xff0c;IP会经常变化&#xff0c;需要将IP固定下来。 2. 第一步 编辑我们 linux 的网卡文件 这个网卡文件…

环境变量配置

举一个小例子来演示一下环境变量配置。 在CMD中打开QQ界面&#xff0c;首先需要知道QQ.exe文件的完整路径。一旦有了这个路径&#xff0c;可以按照以下步骤操作&#xff1a; 打开CMD窗口。可以通过按下Windows键R&#xff0c;输入“cmd”并回车来打开它。在CMD窗口中&#xf…

【LINUX笔记】驱动开发框架

应用程序调动驱动程序 驱动模块运行模式 模块加载-卸载 加载卸载注册函数 加载 驱动编译完成以后扩展名为.ko&#xff0c;有两种命令可以加载驱动模块&#xff1a; insmod和modprobe 驱动卸载 驱动注册注销 //查看当前已经被使用掉的设备号 cat /proc/devices 实现设备的具…

按键模拟精灵

按键模拟精灵功能简单&#xff1a; 1.添加模拟按键 2.删除模拟按键 3.开始模拟 4.停止模拟 适合简单的按键操作&#xff0c;有需要的可以点赞收藏关注我&#xff01;

Axure RP 9 for mac中文版密钥激活版下载

Axure RP 9是一款专业的快速原型设计工具&#xff0c;它可以帮助产品设计师、交互设计师和用户体验设计师等创建高保真度、交互性强的原型&#xff0c;以便在产品开发之前进行测试和用户验证。 软件下载&#xff1a;Axure RP 9 for mac中文版密钥激活版下载 该工具具有丰富的功…

javaSwing俄罗斯方块

目录 1 绪论 1.1程序开发背景及意义 1.2开发技术概述 1.3俄罗斯方块游戏的研究现状 1.3.1 国内外研究现状 1.3.2 文献综述 2相关技术 2.4.1 硬件平台&#xff1a; 2.4.2 软件平台&#xff1a; 3 系统分析 3.1可行性分析 3.1.1经济可行性分析 3.1.2技术可行性分析 3.1.3社会可行…

Linux 文件系统:重定向、缓冲区

目录 一、重定向 1、输出重定向 2、输入重定向 3、追加重定向 4、dup2 系统调用 二、理性理解Linux系统下“一切皆文件” 了解硬件接口 三、缓冲区 1、为什么要有缓冲区? 2、刷新策略 3、缓冲模式改变导致发生写时拷贝 未创建子进程时 创建子进程时 使用fflush…

ubuntu將en01變成eth0的形式

文章目录 前言一、操作步驟1、打開grub文件2、輸入更新指令3、查看結果 二、使用步骤总结 前言 一、操作步驟 1、打開grub文件 使用管理員權限打開&#xff0c;添加新內容 sudo gedit grub2、輸入更新指令 sudo update-grub3、查看結果 使用ifconfig查看是否修改成功&…

安达发|印刷包装APS生产计划排产系统的商业价值

在当今快速消费和竞争激烈的市场环境中&#xff0c;印刷包装行业面临着前所未有的挑战。随着客户需求的多样化、交付期限的缩短以及原材料价格的波动&#xff0c;传统的生产管理方法已无法满足现代印刷包装企业的复杂需求。为了保持竞争力&#xff0c;企业必须采用先进的生产计…

接口测试面试题整理

HTTP, HTTPS协议 什么是DNSHTTP协议怎么抓取HTTPS协议说出请求接口中常见的返回状态码http协议请求方式HTTP和HTTPS协议区别HTTP和HTTPS实现机有什么不同POST和GET的区别HTTP请求报文与响应报文格式什么是Http协议无状态协议?怎么解决HTTP协议无状态协议常见的POST提交数据方…

C++进阶02 多态性

听课笔记简单整理&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;听课的记录代码~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅头脑&#x1f338; 审核&#xff1a;文心一言 目录 &#x1f433;课程来源 &#x1f433;前言 &#x1f40b;运…

JAVA安全(偏基础)

SQL注入 SQLI(SQL Injection)&#xff0c; SQL注入是因为程序未能正确对用户的输入进行检查&#xff0c;将用户的输入以拼接的方式带入SQL语句&#xff0c;导致了SQL注入的产生。攻击者可通过SQL注入直接获取数据库信息&#xff0c;造成信息泄漏。 JDBC JDBC有两个方法获取s…

数据挖掘之关联规则

“啤酒和尿布的荣誉” 概念 项 item&#xff1a;单个的事物个体 &#xff0c;I{i1,i2…im}是所有项的集合&#xff0c;|I|m是项的总数项集&#xff08;item set)/模式&#xff08;pattern)&#xff1a;项的集合&#xff0c;包含k个项的项集称为k-项集数据集(data set)/数据库…

Linux快速入门,上手开发 02.VMware的安装部署

倘若穷途末路&#xff0c;那便势如破竹 —— 24.3.21 一、VMware的作用 在Windows或IOS系统下&#xff0c;给本地电脑安装VMware虚拟机&#xff0c;用来在虚拟机上安装Linux系统&#xff0c;避免重复资源的浪费&#xff0c;可以在虚拟机上搭建Linux系统进行学习 二、VMware的安…

树莓派夜视摄像头拍摄红外LED灯

NoIR相机是一种特殊类型的红外摄像头&#xff0c;其名称来源于"No Infrared"的缩写。与普通的彩色摄像头不同&#xff0c;NoIR相机具备红外摄影和低光条件下摄影的能力。 一般摄像头能够感知可见光&#xff0c;并用于普通摄影和视频拍摄。而NoIR相机则在设计上去除了…

C语言疑难题:杨辉三角形、辗转相除求最大公约数、求π的近似值、兔子问题、打印菱形

杨辉三角形&#xff1a;打印杨辉三角形的前10行 /* 杨辉三角形&#xff1a;打印杨辉三角形的前10行 */ #include<stdio.h> int main(){ int i,j; int a[10][10]; printf("\n"); for(i0;i<10;i){ a[i][0]1; a[i][i]1; …

ROS机器人入门第一课:ROS快速体验——python实现HelloWorld

文章目录 ROS机器人入门第一课&#xff1a;ROS快速体验——python实现HelloWorld一、HelloWorld实现简介&#xff08;一&#xff09;创建工作空间并初始化&#xff08;二&#xff09;进入 src 创建 ros 包并添加依赖 二、HelloWorld(Python版)&#xff08;二&#xff09;进入 r…

Java JDK8新日期API

一、 JDK8 中增加了一套全新的日期时间 API&#xff0c;这套 API 设计合理&#xff0c;是线程安全的。 java.time – 包含值对象的基础包java.time.chrono – 提供对不同的日历系统的访问java.time.format – 格式化和解析时间和日期java.time.temporal – 包括底层框架和扩展…

考研数学老师怎么选❓看这一篇就够了

张宇、汤家凤、武忠祥、李永乐、杨超、王式安、方浩这些老师都有自己擅长的细分 比如张宇老师&#xff0c;杨超&#xff0c;汤家凤&#xff0c;武忠祥老师的高数讲的很好&#xff0c;李永乐老师是线代的神&#xff0c;王式安、方浩概率论讲的很好&#xff0c;所以对于不同的学…