【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新建仓库注意事项
如下所示,是我们的新建仓库时候的注意事项
我们需要注意的是
我们要选择开源
对于这个初始化仓库,我们现在可选可不选,选的话按照我们当前的语言即可,这个.gitignore这个文件的作用如果文件后缀与文件里面的相同的话,是不会被选择提交的,而是忽略的,因为我们提交代码的时候只关心源代码。
对于这个开源许可证,其实大同小异,我们随便选一个即可
这个设置模板也是可以选也可以不选的,我们可以先选一个Readme文件
当我们打开这个gitignore文件的时候,里面的后缀就是如下,它也是可以被修改,添加我们不想要的后缀
2.git的安装
我们得先检查一下git是否安装
直接输入下面的即可
git --version
如果弹出的是这个那么就说明已经安装了
否则我们就要去下载,用如下的命令去下载
yum install git
3.git的克隆
我们先去将仓库给克隆下来
然后再linux上
我们输入
git clone xxxxxxxxxxx //xxxxx代表刚刚复制的东西
注意再这一步,如果要让我们输入密码的话,我们直接输入gitee的账号密码即可
然后我们可以进入test里面去看看
由于有个文件是隐藏的,所以我们使用a
其中.git这是一个隐藏目录,它里面有很多东西记录着我们的行为,我们不要对他做出任何修改
如下是将一个文件先拷贝到这个当前目录中
4.git的add
我们直接输入
git add 路径
如上所示,就会将我们当前路径的所有文件全部提交到暂存区
5.git的commit
git commit -m "消息"
如下所示,当我们add完成以后,我们需要commit,这一步的目的是才是将文件提交到仓库中
这里如果我们是新的用户的话,那么它会让你配置一个邮箱和名字。我们直接填写即可
这一步主要是为了对代码进行溯源。因为我们的代码如果出错的话,需要进行溯源
然后我们就可以进行前面的操作了
6.git的push
如下所示
git push
在push的时候,会让我们输入gitee的手机号和密码,我们直接输入即可
然后我们就可以看到gitee上已经成功提交了代码
7.git log
git log
上面这条命令可以去查看我们之前的提交记录
8.git status
这个可以查找提交状态
如果我们新建了一个文件,会提醒当前有一个文件并没有被托管
如果我们按照它上面说的git add了
那么会再次提醒git commit
如果我们commit了,就会让我们使用push
9. .gitignore
当我们进去这个文件的时候,内部是这样的
我们可以去修改它以此防止某些后缀的文件被提交
比如我们添加这两个
我们可以看到,这样的话,p和pp已经被忽略了
二、Linux调试器—gdb
1.背景
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
比如如下的代码中
我们如果直接编译的话,其实是release版本的
我们可以使用这个命令来查看
readelf -S test | grep -i debug
可见没有找到任何调试信息
如果我们是dubug编译的话,加上g就可以了
我们可以发现,如果是debug下的话会有debug信息的
如果要被gdb调试,必须是debug形式的
2.gdb安装、进入与退出
我们先来安装gdb,它的安装命令为
sudo yum -y install gdb.x86_64
我们先让代码如下所示
当我们想要进入gdb的时候,我们可以直接
gdb test
当我们想要退出的时候
我们可以输入quit或者q指令来退出
3.list/l
这条指令的作用是显示出源代码,每次列10行
如果它后面跟一个数字,那么会显示以该数字为中心的10行代码,如果后面跟一个函数,则显示该函数的代码
如果我们上一条指令是list/l的话,那么我们下一次就可以不用再继续输入list/l,直接回车,就会再次弹出list/l这条指令的效果。即gdb会记住最近一次的指令
4.r/run运行程序
这条指令的作用是运行程序。当程序没有断点的时候,它就会直接运行到结尾,它如同vs2022中的F5
如果程序有断点,则直接运行到下一个断点处(仅限刚开始)
5. break/b 打断点
这个指令需要在其后面加上一个数字或者一个函数名
如果是数字的话,那么会在该行上面打上断点,如果是函数名则会在该函数开头打上断点
如果是多文件的话,我们需要指定文件去打断点
6.info/i b 查看断点
我们刚刚已经打好了断点,可是现在的问题是,我们直接使用list的话,是看不到断点的
所以我们就需要使用这条指令去查找我们当前已有的断点
这个第一列表示的是断点的编号,Enb下面的这一行代表的是这个断点是否起作用
Address代表的是该断点的地址。
What代表的是该断点是第多少行
7.delete/d (n)删除(第n行的)断点
该指令的作用是如果不加n,则删除所有断点,如果加n,则删除编号为n的断点,注意必须是按照编号进行删除
注意对于断点,如果我们使用q退出了调试,那么之前的断点都会消失
当我们将断点打好以后,再去运行的话,那么这个程序它就会跑到断点处停止,因为这个r的操作就是一个类似于F5的操作
8. n/next逐过程
它就类似于vs2022中的F10功能一样,可以逐过程的执行
当我们一直使用n调完了以后,那么如果我们继续查看断点的话,还会显示出断点的执行次数
9. s/step逐语句
这里就相当于vs2022的F11
我们可以使用F11进入到函数内部
10. p 监视
这个指令就类似于vs2022的监视窗口,它可以监视某一个变量的值
11.display 常显示
这个指令和p的差不多,不过弥补了p的一些缺陷,那就是p它当执行下一步的时候又需要重新去调用查看了。而这个常显示是不会这样的
12.undisplay (n) 取消常显示
这个命令的作用是取消常显示
不过要注意的是这个n它代表的是这个编号,而不是这个变量名
13.until n跳到第n行
在前面,我们会发现,我们已经陷入了一个循环了,并且不是很容易就能退出的,所以我们需要使用until n指令,直接跳转到第n行
14.finish 结束当前函数
有时候,我们会希望可以直接的结束当前的函数,我们当然可以用until,不过finish是更加方便的
15.continue/c 从当前开始连续执行
这个命令的意思是从当前开始连续进行,直到遇到下一个断点
16.disable/enable breakpoints 禁用/使能断点
当我们有一个断点不想要删除且我们暂时还不想用它的时候,我们可以将它禁用
禁用以后它就看上去不存在,但是还是有这个断点的
17.set var:修改变量的值
如下所示,这个可以在调试环境下直接修改某个变量的值
18.breaktrace(或bt):查看各级函数调用及参数
我们将代码改为如下
它就类似于栈帧一样,当我们有五层栈帧的时候,bt显示如下
19.info(i) locals:查看当前栈帧局部变量的值
如下所示,当我们处于该层栈帧的时候,可以看到当前的局部变量的值
也可以使用i来代替
三、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
相关文章:

【Linux】第十站:git和gdb的基本使用
文章目录 一、git的基本操作1.gitee新建仓库注意事项2.git的安装3.git的克隆4.git的add5.git的commit6.git的push7.git log8.git status9. .gitignore 二、Linux调试器---gdb1.背景2.gdb安装、进入与退出3.list/l4.r/run运行程序5. break/b 打断点6.info/i b 查看断点7.delete/…...

Single Image Haze Removal Using Dark Channel Prior(暗通道先验)
去雾算法都会依赖于很强的先验以及假设,并结合相应的物理模型,完成去雾过程。本文作者何凯明及其团队通过大量的无雾图像和有雾图像,归纳总结出无雾图像在其对应的暗通道图像上具有极低的强度值(趋近于0),并…...
力扣382.链表随机节点(java利用数组随机返回节点值)
Problem: 382. 链表随机节点 文章目录 思路解题方法复杂度Code 思路 注意链表与数组的特性,对于随机访问读取的操作利用数组可以较方便实现,所以我们可以将链表中的节点值先存入到数组中最后再取出随机生成节点位置的值。 解题方法 1.生成List集合与Rand…...

在jupyter中使用R
如果想在Jupyter Notebook中使用R语言,以下几个步骤操作可行: 1、启动Anaconda Prompt 2、进入R的安装位置,切换到R的安装位置:D:\Program Files\R\R-3.4.3\bin,启动R,具体代码操作步骤如下,在…...

2023(第四届)江西开放数据创新应用大赛等你来挑战!
邀请函 这是一个友好的邀请。无论你是数据领域的专家、学生还是爱好者,我们都欢迎你加入这个平台。这不仅仅是一场比赛,更是一个交流、学习和展示自己的机会。 丰厚奖金:我们为参赛者准备了总计15W的奖金池,期待你的才华在这里得…...

2023-mac rz sz 安装
之前安装过一次,没问题,这次按照之前教程装了就不管上传下载都会卡住; step1: brew install lrzsz step2:在/usr/local/bin 路径下配置两个sh,之前从网上找到的直接用都不对,下面这个是调试过的正式可用的 iterm2…...

使用Matplotlib绘画3D图时运行不出结果,也不报错,图片是空白 !!
1.问题: 我使用如下代码运用matplotlib中的Axes3D绘画3D图,但是运行出来的结果是空白。 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #导入3D包 fig plt.figure() #窗口 #ax Axes3D(fig) # X, Y …...
Matlab函数——find
介绍 当你需要返回某个数组中符合指定条件的所有元素的索引时,可以使用 MATLAB 中的 find 函数。 find 函数语法: indices find(X) indices find(X, k) indices find(X, k, first) indices find(X, k, last) 其中,X 是一个数组…...

mac安装python3
文章目录 1. 安装1.1 brew安装(失败)2. 下载安装包 2. 查看版本3. 配置 1. 安装 1.1 brew安装(失败) brew install python3下载完成后报错:Error: python3.10: unknown or unsupported macOS version: :dunno 解决&a…...

【星海出品】VUE(一)
Windows安装nvm控制器 Windows里找都PowerShell。右击点击管理员运行。 1.安装choco Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1))2.安装NVM choco install nvm 3.查看可…...

Stable Diffusion 的提示词使用技巧
推荐Stable Diffusion自动纹理工具: DreamTexture.js自动纹理化开发包 什么是提示语? 提示语是人工智能中的一个重要组成部分,尤其是自然语言处理 (NLP)。在AI自人工智能中,想要获得好的效果,简…...
Hook函数
在嵌入式系统中,hook函数(也被称为钩子函数)是一种特殊类型的函数,它会在特定的事件发生时被操作系统内部调用。例如,在实时操作系统(RTOS)中,如果删除了一个任务,就会调…...
USB简介系列-01
文章目录 USB简介一、电气USB简介 通用串行总线(USB)是由Compaq,Intel,Microsoft和NEC开发的规范,后来惠普,朗讯和飞利浦加入。这些公司成立了 USB Implementers Forum, Inc 作为一家非营利性公司,以发布规范并组织 USB 的进一步开发。 USB-IF的目的是为当时使用的PC…...
算法小白的心得笔记:比较小数点后五位,而不会受到浮点数精度问题的影响。
epsilon 来比较浮点数 double epsilon 1e-6; // for 6 decimal places for (const auto &ratio : colorRatio) {std::cout << "__" << inum << "__" << ratio << " ";if ((inum - 1) % 10 0){std::cout &l…...

11月起,33个省份纳入数电票开票试点范围内,发票无纸化已是大势所趋!
10月底,北京、贵州、山东(不含青岛市)、湖南、宁夏5个地区相继发布开展数电票试点工作的通知,至此,全国已有33个省份纳入数电票开票试点范围内。根据上述5地区发布的相关公告,11月1日将正式推行“数电票”开…...

NLP之Bert多分类实现案例(数据获取与处理)
文章目录 1. 代码解读1.1 代码展示1.2 流程介绍1.3 debug的方式逐行介绍 3. 知识点 1. 代码解读 1.1 代码展示 import json import numpy as np from tqdm import tqdmbert_model "bert-base-chinese"from transformers import AutoTokenizertokenizer AutoToken…...

matlab中的mapminmax函数初步理解和应用
matlab中的mapminmax函数初步认识 一、mapminmax 顾名思义:映射最大最小 二、语法及举例 2.1 语法1 [Y,PS] mapminmax(X) 将矩阵X映射形成矩阵Y, Y中每行中的最小值对应-1,最大值对应1。PS是一个包含映射信息的结构体。 举例: clc cle…...
svc和ingress的关系
在Kubernetes中,SVC有三种类型,分别是ClusterIP、NodePort和LoadBalancer。而Ingress则是一种服务类型的扩展,它主要用于处理HTTP和HTTPS流量,并提供了对集群内部服务的路由和负载均衡功能。 下面简要介绍SVC的三种类型和Ingress…...
可以使用以下代码对数据库查询结果进行分组统计
public static void GroupAndStatistic(string connectionString, string query) {// 创建一个SQLSugar实例var db new SQLSugarClient(connectionString);// 使用QueryHelper类执行查询var dataTable db.Query<DataRow>().From(query).ExecuteDataTable();// 使用LINQ…...

win10提示mfc100u.dll丢失的解决方法,快速解决dll问题
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“mfc100u.dll丢失”。那么,mfc100u.dll是什么?mfc100u.dll是Microsoft Visual C Redistributable文件之一,它包含了用于MFC (Microsoft Foundation Class…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...