【Linux】Linux命令行git和Linux调试器-gdb的使用

news2024/9/21 13:47:37

文章目录

  • 一、Linux命令行git
    • 1. git是什么
    • 2. Gitee上创建仓库,克隆仓库到本地
    • 3. git三板斧
  • 二、Linux调试器-gdb的使用
    • 1. debug和release的区别
    • 2. 常用命令


一、Linux命令行git

1. git是什么

git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds(Linux之父)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

下面我们举一个例子来深入理解git:

比如当你在本地写好某一个编程文档时,发现有些地方需要修改或者删除,有的人可能会直接在当前文件中直接修改,有的人会复制一份在上面修改,然后删除没用的文件。但是当你发现还是原来的文件好或者另外的版本好时,就可能手足无措了。

此时使用git工具,就是聪明之举了。我们可以在本地建一个版本库,每当我们需要修改时,就可以把之前的版本提交并标明此版的特点。这样文件夹里就只有一个编程文档了。当你需要哪个版本时,只要在版本库中恢复一下就可以了。


2. Gitee上创建仓库,克隆仓库到本地

💖 创建仓库:

这里我们先到Gitee上创建一个仓库。

在这里插入图片描述

当我们创建仓库时,可以将其初始化一下,例如:选择语言,表示我们要在这个仓库中提交什么编程语言的代码,以及添加.gitignore.gitignore的作用是为了帮助我们忽略一些不需要提交到仓库的文件,比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。下面的Readme文件呢就是对仓库的介绍。最后我们点击创建就可以成功在Gitee上创建一个仓库了。

💕 克隆仓库到本地

(一)这里打开我们新创建的仓库,然后右边有个克隆/下载,我们点一下然后在弹出的选项中选择右边的复制就可以复制到远端仓库的链接。

在这里插入图片描述

(二)接下来我们打开我们的xshell,输入指令将仓库克隆到本地。

git clone 远端仓库链接

在这里插入图片描述

这里的learn_-linux就是我们远端的仓库,现在他已经被我们克隆到了本地,当然因为仓库在初始化的时候并不能直接设置为开源仓库,所以在我们进行克隆的时候他可能需要我们输入用户名和密码,这里我们直接把我们的Gitee账号的用户名和密码输入即可解决。


3. git三板斧

git add 将新增文件添加到暂存区

这里我们需要先将进入我们的仓库,然后新建一个目录将需要提交的代码拷贝这个目录下,:

在这里插入图片描述

这里我们可以看到之前写的代码已经被拷贝到了目标文件夹下,接下来我们进行git add操作。

在这里插入图片描述

在我们使用git add进行操作后,我们可以使用git status指令查看暂存区状态,这里我们可以看到刚刚我们新0拷贝过来的文件已经在暂存区了。

git commit 将暂存区的文件添加到本地仓库

💕 指令:

git commit -m '日志'

在这里插入图片描述

我们这里的日志一定要写清楚所提交的代码主要是什么或者更改后新增加了什么样的功能,解决了什么bug,因为别人是可以看到我们的日志信息的,所以这个日志信息我们一定要认真写。

在这里插入图片描述

这里我们可以用git log指令来查看我们之前所提交的记录,以及我们提交者的姓名和邮箱都可以被清楚的查看到,所以我们在提交的时候一定要注意日志信息那些的。当然我们也可以使用git reflog指令来粗略的查看我们提交日志的记录。

git push 将本体仓库新增内容推送到远端

在这里插入图片描述

这里我们经过最后的git push之后就可以在我们的Gitee上看到我们所提交的代码了:

在这里插入图片描述


二、Linux调试器-gdb的使用

1. debug和release的区别

我们知道程序的发布方式有两种,debug模式和release模式。

Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。

Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。

gdb呢其实就是Linux下的一个调试器,它可以通过指令的方式对我们的代码进行调试。但是平常我们在使用gcc对我们的代码进行编译的时候生成的默认版本是release版本,是不能进行调试的,所以我们在使用makefile的时候可以给我们的gcc 编译选项带上-g选项,这样我们的gcc在编译代码的时候默认生成的就是debug版本了。

在这里插入图片描述


2. 常用命令

gdb 可执行程序:开始调试

这里我们需要注意,当我们使用gdb进行调试的时候只能对我们生成的可执行程序进行调试。

在这里插入图片描述

l 行号/函数名:显示源码

这里我们从第0行开始显示,当我们按下指令后他会给我们显示从我们想要看的那一行代码往下的10行代码,当我们想要往下翻的时候,只需要再次输入l或者回车即可给我们显示接着上次代码的内容往下列,每次显示10行。

当然这里我们也需要注意如果我们要是在调试的过程中想要看代码的时候也可以直接使用l 行号来查看,这里显示代码并不会影响我们的调试。

在这里插入图片描述

r:开始调试

如果我们已经在某一行打了断点,当我们输入r后他会直接跳转到我们的断点处停下来,如果当前调试的过程中没有打断点,那么则会直接将整个程序执行完然后停下来。

在这里插入图片描述

b 行号/函数名:打断点/ info b:查看断点

这里我们需要注意的是:在我们查看断点时,Num表示的是断点的编号,Enb表示断点的状态是否打开,y表示断电开启,n表示断点关闭。What则表示断电具体所在的位置。

在这里插入图片描述

d 断点编号/break:删除断点

这里我们需要注意的是d 断点编号表示的是删除指定编号的断点,d break表示的是删除所有断点,当我们删掉断点后在使用info指令去查看断点时,就会显示断点不存在。

在这里插入图片描述

disable b 断点编号:关闭指定断点/ enable b 断点编号:开启指定断点

这里我们可以看到,当我们disable将断点关闭后Enb显示的断点是关闭状态,当使用enable将断点打开后Enb显示的断点是开启状态。

在这里插入图片描述

n:逐过程调试

这里我们可以看到执行n指令后,一次就可以跳过一个函数,和vs中的f10类似。

在这里插入图片描述

s:逐语句调试

当我们使用s指令进行调试的时候发现可以进入函数内部,然后一条一条语句执行,和vs中的f11类似。

在这里插入图片描述

display:长显示(内置类型,结构体等自定义类型)

在这里插入图片描述

undisplay:取消长显示

在这里插入图片描述

until 行号:在函数内进行指定位置跳转,执行完区间代码

这里我们可以看到直接从断点处执行到了我们的18行。

在这里插入图片描述

c:从一个断点处直接运行至下一个断点处

在这里插入图片描述
当然gdb中还有很多其他的指令可以进行调试,这里就不一一列举了。

  • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行。
  • s或step:进入函数调用
  • break(b) 行号:在某一行设置断点
  • break 函数名:在某个函数开头设置断点
  • info break :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值。
  • set var:修改变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序
  • run(或r):从开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • info(或i) breakpoints:参看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值
  • quit:退出gdb

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

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

相关文章

分享52个Java源码,总有一款适合您

Java源码 分享52个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接:https://pan.baidu.com/s/1YpNL5QWwQ18Y-KRmFHFs5g?pwdqc8w …

吴恩达机器学习课程笔记:监督学习、无监督学习

1.吴恩达机器学习课程笔记:监督学习、无监督学习 吴恩达机器学习系列课程:监督学习 吴恩达机器学习系列课程:无监督学习 仅作为个人学习笔记,若各位大佬发现错误请指正 机器学习的学习算法:监督学习、无监督学习、半…

1591_AURIX_TC275_PMU_Flash的保护

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 可以支持保护功能的Flash是前面文档中呼出来的几块,其中DFlash由于多模块公用,还有具体的拆分。PFlash可以进行两方面的保护,一个是错误的读取方式保护&…

python列表(list)底层实现

list Python内存管理中的基石 Python中所有类型创建对象时,底层都是与PyObject和PyVarObject结构体实现,一般情况下由单个元素组成对象内部会使用PyObject结构体(float)、由多个元素组成的对象内部会使用PyVarObject结构体 2个…

应用层——电子邮件(SMTP、POP3、IMAP)

目录 1. 电子邮件系统及组成结构 1.1 电子邮件 1.2 电子邮件系统的组件 2. SMTP(邮件发送协议) 2.1 SMTP的特征 2.2 SMTP的基本操作 2.3 SMTP协议的基本流程 2.4 SMTP交互与应答 2.5 SMTP与HTTP的对比 3. 邮件报文格式与MIME 3.1 电子邮件格式 3.2 多用途网际…

STM32时钟系统原理和作用

时钟对于单片机来讲类似于心脏对于人体,单片机通过时钟信号控制单片机工作。 1.时钟系统工作流程 时钟源输入----被分频或倍频----输出至系统/外设/外部接口 2.时钟分类 RC时钟精度低,体积小, OSC时钟精度高,体积大。 3.部分…

5.多层感知机

5.多层感知机 目录 感知机 基本内容训练感知机感知机存在的问题总结 多层感知机 隐藏层 单隐藏层-单分类 激活函数 ReLU函数sigmoid函数tanh函数总结 多类分类 多层感知机的从零开始实现 初始化模型参数激活函数模型损失函数训练 多层感知机的简洁实现 模型模型选择、欠拟合和…

⭐基于unity物体移动的方法API的总结-GIF图文详解⭐

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏 unity常用API ⭐相关文章: 线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDa…

文献阅读:Towards Out-of-Distribution Sequential Event Prediction:A Causal Treatment

文献阅读:Towards Out-of-Distribution Sequential Event Prediction:A Causal Treatment 1. 问题描述2. 方法 & 模型设计 1. loss定义2. 模型设计 3. 实验 & 结果 1. 基础实验2. CaseQ策略细节分析 4. 结论 & 总结 文献链接:ht…

GDB调试学习

文章目录简介准备工作常用命令简介 ​GDB 全称“GNU symbolic debugger”,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GD…

五个了解自己天赋优势的分析工具(二)盖洛普优势测评

盖洛普优势测评 盖洛普优势识别器(也叫克利夫顿优势评估),是盖洛普公司旗下⼀款王牌产品,是⼀个专⻔⽤来识别⼀个⼈隐形天赋、潜在优势、驱动⼒来源的⼯具,它可以帮助⼀个⼈科学认识⾃⼰。 它把⼈的思维⽅式、感受形…

网络初识

一些基本概念认识IP地址概念:IP地址用于定位主机的网络地址,标识了网络上设备所在的位置。也就是说主机在哪。格式:IP地址是一个32位的二进制数,通常被分割为4个字节。通常我们使用“点分十进制”的方式来表示主机的IP地址——>…

2.2 SQL入门和实战

文章目录数据库介绍MySQL的入门应用SQL的基础与DDLSQL的分类:SQL的基础语法特性:DDL库管理:DDL表管理:SQL-DMLSQL-DQLDQL基础查询DQL分组聚合排序分页Python&MySQLcommit数据库介绍 数据库的层级:按照库->表-&…

WAL Write AheadLog

WAL即 Write Ahead Log,WAL的主要意思是说在将元数据的变更操作写入磁盘之前,先预先写入到一个log文件中 磁盘读取分为顺序读取和随机读取 内存读取也有顺序读取和随机读取 下图是磁盘,内存 顺序和随机读取的效率表 一般来说内存读取速度要…

硬件设计基础 —— 电流、电压、功率

目录 电流的形成 原子的结构 原子核与电子 电子的移动 电流的测量 电子的运动形成电流 电压的作用 功率 电流的形成 原子的结构 上图为原子结构示意图中间带正电的称为原子核带负电荷的电子围绕在他周围旋转原子核与电子 电子离原子核越远,外围电子越少&…

Cadence PCB仿真使用Allegro PCB SI进行数字电路毛刺容差设置的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1, 概述2,配置方法3,总结1, 概述 数字信号的波形往往不是完美的低和高电平,经常会有一些毛刺。这在信号完整性仿真中也经常遇到,为了保证仿真顺利进行需要对接收电路的毛刺容差进行设置。本文简单介绍其配置方法。…

COCO_02 二值分割数据集制作为COCO数据集

文章目录1 前言2 分割数据集格式2.1 原始图像2.2 分割标注2.3 文件名信息3 制作COCO格式基本流程4 根据分割标注制作COCO标注(核心)Main1 前言 最近要开始实例分割任务,由于实例分割是建立再目标检测基础之上的,因此需要制作能用…

两道一年级数学题把我干废了

目录一、背景二、题目三、过程第一解:第二解:第三解:四、总结五、升华一、背景 最近在看小学一年级数学课本的时候,其中两道题让我感叹现在小学教育题的伟大和深厚,并且从中领悟到了…哈哈哈,先卖个官司&a…

【Ansible】Ansible 角色

Ansible 角色 文章目录Ansible 角色一、Ansible Roles 介绍二、Roles 结构三、role 的制作过程四、如何在PlayBook中使用 Role1. 经典(原始)方式2. 新方式五、如何使用 Galaxy一、Ansible Roles 介绍 一个数据中心有可能存在好多类型的服务器。比如&…

【博客588】ipvs nat模式下独立于iptables与conntrack的连接跟踪表和NAT机制

ipvs nat模式下独立于iptables与conntrack的连接跟踪表和NAT机制 ipvs的连接跟踪表和NAT机制 ipvs只有DNAT和de-DNAT功能 ,它独立与iptables和conntrack,实现了自己的一套连接跟踪表和NAT机制。ipvs仅仅在做DNAT后对conntrack连接进行更新,防止回包因为没有记录而被丢弃。 i…