【Linux】第十站:git和gdb的基本使用

文章目录

  • 一、git的基本操作
    • 1.gitee新建仓库注意事项
    • 2.git的安装
    • 3.git的克隆
    • 4.git的add
    • 5.git的commit
    • 6.git的push
    • 7.git log
    • 8.git status
    • 9. .gitignore
  • 二、Linux调试器---gdb
    • 1.背景
    • 2.gdb安装、进入与退出
    • 3.list/l
    • 4.r/run运行程序
    • 5. break/b 打断点
    • 6.info/i b 查看断点
    • 7.delete/d (n)删除(第n行的)断点
    • 8. n/next逐过程
    • 9. s/step逐语句
    • 10. p 监视
    • 11.display 常显示
    • 12.undisplay (n) 取消常显示
    • 13.until n跳到第n行
    • 14.finish 结束当前函数
    • 15.continue/c 从当前开始连续执行
    • 16.disable/enable breakpoints 禁用/使能断点
    • 17.set var:修改变量的值
    • 18.breaktrace(或bt):查看各级函数调用及参数
    • 19.info(i) locals:查看当前栈帧局部变量的值
  • 三、gdb调试器总结

一、git的基本操作

1.gitee新建仓库注意事项

如下所示,是我们的新建仓库时候的注意事项

image-20231102174122943

我们需要注意的是

我们要选择开源

对于这个初始化仓库,我们现在可选可不选,选的话按照我们当前的语言即可,这个.gitignore这个文件的作用如果文件后缀与文件里面的相同的话,是不会被选择提交的,而是忽略的,因为我们提交代码的时候只关心源代码。

对于这个开源许可证,其实大同小异,我们随便选一个即可

这个设置模板也是可以选也可以不选的,我们可以先选一个Readme文件

当我们打开这个gitignore文件的时候,里面的后缀就是如下,它也是可以被修改,添加我们不想要的后缀

image-20231102174222233

2.git的安装

我们得先检查一下git是否安装

直接输入下面的即可

git --version

如果弹出的是这个那么就说明已经安装了

image-20231102174614090

否则我们就要去下载,用如下的命令去下载

yum install git

3.git的克隆

我们先去将仓库给克隆下来

image-20231102174342224

然后再linux上

我们输入

git clone xxxxxxxxxxx   //xxxxx代表刚刚复制的东西

image-20231102175016924

注意再这一步,如果要让我们输入密码的话,我们直接输入gitee的账号密码即可

然后我们可以进入test里面去看看

image-20231102175107763

由于有个文件是隐藏的,所以我们使用a

image-20231102175150445

其中.git这是一个隐藏目录,它里面有很多东西记录着我们的行为,我们不要对他做出任何修改

如下是将一个文件先拷贝到这个当前目录中

image-20231102175502633

4.git的add

我们直接输入

git add 路径

image-20231102175722694

如上所示,就会将我们当前路径的所有文件全部提交到暂存区

5.git的commit

git commit -m "消息"

如下所示,当我们add完成以后,我们需要commit,这一步的目的是才是将文件提交到仓库中

image-20231102175949287

这里如果我们是新的用户的话,那么它会让你配置一个邮箱和名字。我们直接填写即可

image-20231102180715520

这一步主要是为了对代码进行溯源。因为我们的代码如果出错的话,需要进行溯源

然后我们就可以进行前面的操作了

6.git的push

如下所示

git push

image-20231102180904898

在push的时候,会让我们输入gitee的手机号和密码,我们直接输入即可

然后我们就可以看到gitee上已经成功提交了代码

image-20231102181022985

7.git log

git log 

上面这条命令可以去查看我们之前的提交记录

image-20231102181420664

8.git status

这个可以查找提交状态

image-20231102181843809

如果我们新建了一个文件,会提醒当前有一个文件并没有被托管

image-20231102181935011

如果我们按照它上面说的git add了

image-20231102182137565

那么会再次提醒git commit

image-20231102182349064

如果我们commit了,就会让我们使用push

9. .gitignore

当我们进去这个文件的时候,内部是这样的

image-20231102182632959

我们可以去修改它以此防止某些后缀的文件被提交

比如我们添加这两个

image-20231102182938160

我们可以看到,这样的话,p和pp已经被忽略了

image-20231102183040018

二、Linux调试器—gdb

1.背景

程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

比如如下的代码中

image-20231103165543898

image-20231103170035729

我们如果直接编译的话,其实是release版本的

我们可以使用这个命令来查看

readelf -S test | grep -i debug

image-20231103170127844

可见没有找到任何调试信息

如果我们是dubug编译的话,加上g就可以了

image-20231103170211742

我们可以发现,如果是debug下的话会有debug信息的

image-20231103170552243

如果要被gdb调试,必须是debug形式的

2.gdb安装、进入与退出

我们先来安装gdb,它的安装命令为

sudo yum -y install gdb.x86_64

我们先让代码如下所示

image-20231103173224344

当我们想要进入gdb的时候,我们可以直接

gdb test

image-20231103174705332

当我们想要退出的时候

我们可以输入quit或者q指令来退出

3.list/l

这条指令的作用是显示出源代码,每次列10行

image-20231103175041880

如果它后面跟一个数字,那么会显示以该数字为中心的10行代码,如果后面跟一个函数,则显示该函数的代码

image-20231103175355535

如果我们上一条指令是list/l的话,那么我们下一次就可以不用再继续输入list/l,直接回车,就会再次弹出list/l这条指令的效果。即gdb会记住最近一次的指令

4.r/run运行程序

这条指令的作用是运行程序。当程序没有断点的时候,它就会直接运行到结尾,它如同vs2022中的F5

image-20231103181155956

如果程序有断点,则直接运行到下一个断点处(仅限刚开始)

5. break/b 打断点

这个指令需要在其后面加上一个数字或者一个函数名

如果是数字的话,那么会在该行上面打上断点,如果是函数名则会在该函数开头打上断点

image-20231103181708598

如果是多文件的话,我们需要指定文件去打断点

image-20231103193111445

6.info/i b 查看断点

我们刚刚已经打好了断点,可是现在的问题是,我们直接使用list的话,是看不到断点的

所以我们就需要使用这条指令去查找我们当前已有的断点

image-20231103181827797

这个第一列表示的是断点的编号,Enb下面的这一行代表的是这个断点是否起作用

Address代表的是该断点的地址。

What代表的是该断点是第多少行

7.delete/d (n)删除(第n行的)断点

该指令的作用是如果不加n,则删除所有断点,如果加n,则删除编号为n的断点,注意必须是按照编号进行删除

image-20231103182647299

image-20231103182915992

注意对于断点,如果我们使用q退出了调试,那么之前的断点都会消失

当我们将断点打好以后,再去运行的话,那么这个程序它就会跑到断点处停止,因为这个r的操作就是一个类似于F5的操作

image-20231103183441445

8. n/next逐过程

它就类似于vs2022中的F10功能一样,可以逐过程的执行

image-20231103184059038

当我们一直使用n调完了以后,那么如果我们继续查看断点的话,还会显示出断点的执行次数

image-20231103184501650

9. s/step逐语句

这里就相当于vs2022的F11

我们可以使用F11进入到函数内部

image-20231103184654378

10. p 监视

这个指令就类似于vs2022的监视窗口,它可以监视某一个变量的值

image-20231103185112211

11.display 常显示

这个指令和p的差不多,不过弥补了p的一些缺陷,那就是p它当执行下一步的时候又需要重新去调用查看了。而这个常显示是不会这样的

image-20231103185515819

12.undisplay (n) 取消常显示

这个命令的作用是取消常显示

不过要注意的是这个n它代表的是这个编号,而不是这个变量名

image-20231103185747434

13.until n跳到第n行

在前面,我们会发现,我们已经陷入了一个循环了,并且不是很容易就能退出的,所以我们需要使用until n指令,直接跳转到第n行

image-20231103190117676

14.finish 结束当前函数

有时候,我们会希望可以直接的结束当前的函数,我们当然可以用until,不过finish是更加方便的

image-20231103190601346

15.continue/c 从当前开始连续执行

这个命令的意思是从当前开始连续进行,直到遇到下一个断点

image-20231103191925042

16.disable/enable breakpoints 禁用/使能断点

当我们有一个断点不想要删除且我们暂时还不想用它的时候,我们可以将它禁用

image-20231103192421214

禁用以后它就看上去不存在,但是还是有这个断点的

17.set var:修改变量的值

如下所示,这个可以在调试环境下直接修改某个变量的值

image-20231103193424510

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

我们将代码改为如下

image-20231103194502555

它就类似于栈帧一样,当我们有五层栈帧的时候,bt显示如下

image-20231103194706109

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

如下所示,当我们处于该层栈帧的时候,可以看到当前的局部变量的值

image-20231103194943913

也可以使用i来代替

image-20231103195026279

三、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

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

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

相关文章

2023年11月IDE流行度最新排名

点击查看最新IDE流行度最新排名(每月更新) 2023年11月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

csdn初始模板【自用】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

【MongoDB-Redis-MySQL-Elasticsearch-Kibana-RabbitMQ-MinIO】Java全栈开发软件一网打尽

“Java全栈开发一网打尽:在Windows环境下探索技术世界的奇妙之旅” 前言 全栈开发是一项复杂而令人兴奋的任务,涵盖了从前端到后端、数据库到可视化层、消息队列到文件存储的广泛领域。本文将带您深入探讨在Windows环境下进行全栈开发的过程&#xff0…

金融帝国实验室(Capitalism Lab)推出一个密钥即完成注册机制!

为了方便趸购『金融帝国实验室』(Capitalism Lab)正版玩家,Enlight官方正式推出『一个密钥即完成注册』机制,切实简化游戏账户注册流程! ————————————— 『一个密钥即完成注册』适用于趸购“游戏本体4DLC”…

LazyVim: 将 Neovim 升级为完整 IDE | 开源日报 No.67

curl/curl Stars: 31.5k License: NOASSERTION Curl 是一个命令行工具,用于通过 URL 语法传输数据。 核心优势和关键特点包括: 可在命令行中方便地进行数据传输支持多种协议 (HTTP、FTP 等)提供丰富的选项和参数来满足不同需求 kubernetes/ingress-n…

Oracle获取执行计划的6种方法

一、什么是执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作,分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时,必须知道执行计划;所以执行计划常用…

oracle使用regexp_substr来拆分,CONNECT BY LEVEL查询卡死,速度慢的问题。

一、问题 oracle 使用regexp_substrCONNECT BY LEVEL来,根据特定字符拆分成多行。 (注意这里我的数据是每个值都有“ ; ”,即使后面没有值,后面也会有个“ ; ”, 如果是正常的分隔符,sql 需要改成” LEVEL…

el-input-number输入框超过限制后自动变为最大值

input输入框使用了el-input-number 需求:目标室温输入框数据库设置最大是4位整数,限制一位小数,且后面要加单位,当输入数字超过限制,默认显示限制的最大值 ,所以就有了输入完图一自动变为图二的数字。 el-i…

unittest 统计测试执行case总数,成功数量,失败数量,输出至文件,生成一个简易的html报告带饼图

这是一个Python的单元测试框架的示例代码,主要用于执行测试用例并生成测试报告。其中,通过unittest模块创建主测试类MainTestCase,并加载其他文件中的测试用例,统计用例的执行结果并将结果写入文件,最后生成一个简单的…

记录一次校园CTF--wp

一.第一题简单nc 这题直接nc 地址端口即可得到flags没有套路 二.第二题pwn:ezstack 这是一题栈溢出题目,查看保护: 没有开启PIE,运行下查看效果: 题目是一个文字购物游戏。 接着扔进IDA中分析: 在主函数中我们找到…

macOS电池续航工具:Endurance中文

Endurance for Mac是一款强大而实用的电池管理和优化软件,专为MacBook设计。通过智能调整系统设置和管理后台应用,它能有效延长电池续航时间,提升工作和娱乐效率,成为你在各种场合下的得力助手。 Endurance for Mac软件的功能特色…

cordova Xcode打包ios以及发布流程(ionic3适用)

第一步 1、申请iOS证书 2、导入证书到钥匙串 第二步 1、xcode配置iOS证书 1.1用Xcode打开你的项目(我的Xcode版本是新版) 修改如下图 回到基本信息设置界面,Bundie 这项填写,最先创建的那个appid,跟创建iOS描述文件时选…

MySQL基础架构详解

概述 我们学习东西,都不应该是先去了解细节,而是应该窥其全貌,这样才能从高纬度去理解问题,同样我们学习mysql也是一样的,我们应该先了解整个mysql架构,及来龙去脉,才能更好的掌握它。下面我们开…

Mybatis-Plus使用Wrapper自定义SQL

文章目录 准备工作Mybatis-Plus使用Wrapper自定义SQL注意事项目录结构如下所示domain层Controller层Service层ServiceImplMapper层UserMapper.xml 结果如下所示:单表查询条件构造器单表查询,Mybatis-Plus使用Wrapper自定义SQL联表查询不用,My…

qt6:无法使用setFontColor

问题描述 跟着C开发指南视频学习,但是发现无论是直接使用ui设计,还是纯代码都无法实现变更字体颜色的功能。图中显示,点击颜色控件后,文本框的文字加粗、下划线、斜体等才能设置,但是无法变更颜色。 此文提醒qt sty…

基于驾驶训练算法的无人机航迹规划-附代码

基于驾驶训练算法的无人机航迹规划 文章目录 基于驾驶训练算法的无人机航迹规划1.驾驶训练搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用驾驶训练算法来优化无人机航迹规划。 …

『MySQL快速上手』-③-库的操作

文章目录 1.创建数据库2.创建数据库案例3.字符集和校验规则3.2 校验规则对数据库的影响3.2.1 进行查询3.2.2 进行排序 4.字符集和检验规则的作用5.操纵数据库5.1 查看数据库5.2 显示创建语句5.3 修改数据库5.4 数据库删除 6.备份与恢复6.1 备份6.2 还原6.3 注意事项 7.查看数据…

[量化投资-学习笔记007]Python+TDengine从零开始搭建量化分析平台-布林带

布林带(Bollinger Bands)也称为布林通道、保力加通道,是由约翰布林格(John Bollinger)发明的技术分析指标。布林通道通常被用来确认资产价格波动范围。 布林通道是由三条平滑的曲线组成的趋势线图表,中线为…

js原型链

什么叫原型链 原型链是js中的核心,原型链将各个属性链接起来,在原型链上面定义,原型链上的其他属性能够使用,原型链就是保证继承 原型链区分 原型链分为显式原型和隐式原型 显式原型:只有函数和构建函数才有显式原型…

CCF CSP认证 历年题目自练Day44

题目一 试题编号: 201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个…