Linux·权限与工具-git与gdb
1. git工具
git是一款软件,发明它的人同时发明了Linux操作系统,也就是大名鼎鼎的Linus Torvalds
林纳斯·托瓦兹。后来人们把git软件包装,产生了github、gitee等平台。
git产生的初衷就是便于进行多人协同管理,同时它还可以用来将本地文件上传到云端管理,进行版本控制。
1.1 git的安装与仓库下载
安装指令:yum install -y git
第一步:新建仓库
首先在gitee上创建账户,并新建一个仓库。
创建好之后复制这里这个链接,然后回到Linux,输入命令 git clone 链接 就可以把远端的仓库同步下来
可以看到这个文件夹就是我们远端的仓库。
第二步:三板斧提交代码
所谓三板斧就是add commit push
可以将写好的代码放在这个目录下
我们将上节写的代码复制到这个目录下之后,这个文件与git暂时没有任何关系。
git在本地的结构是这样的
这个目录下有一个.git的隐藏目录,这里面的文件才算是被git托管起来的内容,其下还有index文件缓冲区,和objects文件的本地目录两个模块。我们都是用 add 先将文件添加到缓冲区,再用commit -m “日志描述” 将文件放入本地目录中,才算在本地用git软件将文件托管了起来。
下面我们操作一下
这里我们就提交失败了,在此要说两个问题,第一个是 git status 命令可以查看git缓冲区中都有哪些文件,就比如我们刚才add了hello.c文件就在这里出现了。
第二个就是这个提交失败的原因,就是我们没有设置提交人信息,我们把Run下面那两行代码复制并修改双引号中的内容就好了
此时本地的git就已经托管好了,下面我们使用 git push 命令上传
它会要求输入一下gitee的用户名和密码,然后就可以上传好了
刷新一下就可以在仓库中看到刚刚上传的文件。
1.2 .gitignore文件
这个文件就是用来忽略某些特定后缀的文件用的,使得这些文件不会被add进文件缓冲区。
我们可以vim进这个文件看看
这些后缀都是不会进入缓冲区的,我们可以通过修改这个文件来控制哪些后缀的文件可以放入缓冲区。
事实上这个文件存在的意义时避免那些中间文件被上传。
1.3 pull指令
当两个人同时管理一个仓库时难免会因为两人本地文件的不同,导致具体应该使用谁的本地文件作为远端文件的上传版本的冲突。
因此git在解决这一问题时使用了一个强制与云端同步的策略,就比如一个人先把本地修改好的文件上传到云端了,另一个人想把他的文件上传的时候就会发现因为云端和本地文件的版本冲突而git拒绝上传文件。
此时就需要使用指令 git pull 将云端文件拉取下来同步到本地,才能再将本地文件上传到云端。如果说云端文件修改了一行代码,那在pull到本地之后,也会在文件中体现出来哪行代码被修改了,导致与本地文件不同,此时就需要程序员自己去做合并,再将最终版本push上传。
2. gdb 与 cgdb 工具
gdb工具是最常见的命令行式调试工具。首先我们可以先查看一下自己的系统中有没有安装这款软件。
使用命令 gdb --version ,如果出现如下信息就说明安装好了
否则使用命令 yum install -y gdb 安装软件
程序发布方式有两种,release版本和debug版本,调试只能在debug版本下进行。对于gdb工具来说也是如此。
我们先做一下准备工作,随便写一个程序,当然,可以还写一个makefile方便编译
程序的内容就是计算连加,makefile中写的编译逻辑就是正常的编译。但是这么写的话在gcc/g++编译器下是默认编译成release版本的程序。
如果想要发布成release版本就要在编译命令最后加上 -g 选项
可以看到debug版本的程序明显要比relese版本的大,因为它还多包含了一些调试信息。
2.1 进入gdb软件与打断点
gdb+需要调试的程序就可以进入gdb模式,对这个程序进行调试操作
quit / q 可以用quit或简写成q退出gdb软件
当我们进入软件之后当然需要看到代码才行
list / l + 数字/函数名 list或简写成l,加上行号或函数名,就可以展示这个行号附近的10行代码,展示过一次之后按回车就可以接着继续向后展示下面的代码。
break/b + 数字/函数名 breakpoint设置断点,需要指定打断点的行号位置或函数位置
d + 数字 delete breakpoint删除某个断点,这里的数字不是行号了,而是断点的序号
info break/b 显示断点信息
这里我在Sum函数和main函数的位置都打上了断点,观察断点信息。Num中写的就是断点序号,d后面的数字就是这个东西。What中会显示这个断点具体打在了第几行上。
这里要提示一下,断点的序号在一个调试周期内是固定线性增长的,就是说即使现在把断点1,2都删了,再打断点,其序号也是从3开始增长的。除非退出gdb软件重进,但如果这么做的话,上一个调试周期中未删除的断点也都没了。
disable + 数字 禁用断点
enable + 数字 启用断点
2.2 调试运行 展示变量
run / r 开始调试,相当于VS调试中的F5
c 运行到下一断点,相当于VS中的F5
next / n 逐过程,单步执行,不进入函数内部,相当于VS中的F10
step / s 逐语句,单步执行,进入函数内部,相当于VS中的F11
finish 跑完当前所处的子函数
首先我使用 r ,开始调试,它直接跑到第一个断点处,也就是第16行。然后用 n 逐过程调试,直到第20行也就是函数出现的那一行。进行 s 逐语句调试,可以看到从第20行进入了Sum函数,并且在函数中陷入了循环。
在单步执行的过程中我们可以直接按回车让调试一步一步往后走,因为在gdb中直接按回车键的含义是模仿上一步的动作。也就是说我们输入s之后,后面的单步调试就可以直接按回车,gdb会自己帮我们输入一个s。
在VS中有窗口选项来供我们时事查看变量的值的变化情况,这种选择在gdb中也有
display + 变量名 常显示该变量的值,每执行一次命令都会把这个变量的值打印出来
undisplay + 序号 关闭某个变量的常显示,这里也是要选择变量的序号而不是变量名
p + 变量名 暂时显示某变量的值
info locals 展示当前函数栈帧内所有变量的值
这里我给 i 变量用的是后置++所以它的值看起来有点怪
如果一个循环直接不停的循环不合适,因此gdb提供了在一个函数中向下跳转的功能。
until + 行号 跳转到某行
因为这个循环一直在7行和9行之间跳转,因此我们直接看看9行附近是什么,until出循环。
这里还展示了 p 命令的效果。
2.3 cgdb工具
上面就是命令行调试的基本操作了,但是gdb毕竟不能实时看到代码,还是太不方便了,于是我们可以使用cgdb工具,这个工具是将代码和命令行做了分屏和一定程度的可视化,相对gdb方便了许多。
安装cgdb工具:sudo yum install -y cgdb
可以看到这一整个界面还是非常清晰的,目前正在调试的行号会用绿色标注,打的断点会用红色标注。
其操作的命令是和gdb一样的。
2.4 其他调试命令
watch 监视某变量的值是否变化,watch也属于断点的一种,每次被触发都会停下来,可以用 d 删除
set var 变量=数值 在运行期间修改某变量的值
b 行号 if 变量==数值 新增条件断点,当变量等于某个数值的时候停下来
condition 断点号 变量==数值 在已有断点上追加条件断点
至此Linux操作系统的基本使用方法和所需工具讲解完了,后面我将在Lunix环境下从操作系统和网络两个方面继续学习。
相关文章:

Linux·权限与工具-git与gdb
1. git工具 git是一款软件,发明它的人同时发明了Linux操作系统,也就是大名鼎鼎的Linus Torvalds 林纳斯托瓦兹。后来人们把git软件包装,产生了github、gitee等平台。 git产生的初衷就是便于进行多人协同管理,同时它还可以用来将本…...

unity 如何 团队协作避免文件冲突?
在Unity团队协作中,避免文件冲突的关键在于版本控制、场景和Prefab的管理、以及沟通。以下是具体方法: 1. 使用版本控制系统 (VCS) Unity支持多个版本控制系统,如Git和Perforce。通过版本控制,每位团队成员可以独立工作&…...

VOC2007 的ImageSets/Main目录下通常有四个文件test.txt val.txt train.txt trainval.txt
在 VOC2007 的ImageSets/Main目录下通常有四个文件: test.txt:这个文件列出了用于测试的图像文件名。这些图像将在评估模型性能等测试阶段被使用。train.txt:此文件包含用于训练的图像文件名。在模型的训练过程中,程序会读取这些图…...

JavaScript中的parseInt(), Number(),+有啥区别?
文章目录 parseInt()Number()一元加号 处理 NaN 的常见方法1. 使用 isNaN() 函数检查值2. 使用 Number.isNaN() 方法3. 提供默认值4. 使用 try...catch 结构5. 使用类型守卫 在JavaScript中,parseInt(), Number(), 和一元加号 都可以用来转换值到数字类型ÿ…...

java核心基础
文章目录 1. Java开发基础1.1 DOS常用命令:(以MAC常用命令比较)1.2 JVM、JRE、JDK之间的关系1.3 Java开发环境的搭建1.4 Java的注释,标识符、标识符的命名规范1.5 变量和常量的定义及初始化1.6 Java的运算符1.7 三大语句1.8 常用的类1.8.1 ja…...

java 字符串如何通过占位符替换字符串
在Java中,可以使用String.format()方法或者MessageFormat.format()方法来通过占位符替换字符串。 例子1:使用String.format()方法 String str "Hello, %s! Today is %s."; String result String.format(str, "Alice", "Sun…...

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer,是一种实时…...

2024.9.24 数据分析
资料 111个Python数据分析实战项目,代码已跑通,数据可下载_python数据分析项目案例-CSDN博客 【数据挖掘六大项目实战】敢说这是全B站讲的最详细最通俗易懂的数据挖掘教程!整整60集!学不会来找我!-数据挖掘、数据挖掘…...

企业急于采用人工智能,忽视了安全强化
对主要云提供商基础设施上托管的资产的安全分析显示,许多公司为了急于构建和部署 AI 应用程序而打开安全漏洞。常见的发现包括对 AI 相关服务使用默认且可能不安全的设置、部署易受攻击的 AI 软件包以及不遵循安全强化指南。 这项分析由 Orca Security 的研究人员进…...

【深海王国】初中生也能画的电路板?目录合集
Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督为大家带来系列文章《初中生也能画的电路板》,帮你一周内快速入门PCB设计,手把手教你从元器件库添加、电路原理图绘制、…...

Java日期格式化注解@DateTimeFormat和@JsonFormat
DateTimeForma 这个注解主要用于处理从前端传递到后端的日期和时间数据。当你的 Spring 应用程序接收到一个 http请求,并且请求参数包含日期和时间数据时,DateTimeFormat 可以帮助你将这些数据解析为 Java Date 或 LocalDateTime 对象。 JsonFormat 这…...

阿里巴巴中国站商品详情API返回值的国际化支持
阿里巴巴中国站(通常指的是1688.com或淘宝、天猫等平台的API,但具体到商品详情API时,由于阿里巴巴的API体系庞大且不断更新,我无法直接提供一个特定于某个版本或接口的完整代码示例。不过,我可以给你一个概念性的指导&…...

TCP/IP - IP
目录 1. IPv4地址1.1. NAT技术2. IPv4数据报3. IP 分片与重组回见TCP/IP IP 网际互连协议(Internet Protocol)根据「IP地址」将数据传输到指定的目标主机,是一种 「不可靠」的 「端到端」的数据包 「传输服务」 所有的 TCP、UDP 及 ICMP 帧都以 IP 数据报格式传输。IP 协议…...

《JKTECH柔性振动盘:原理与多行业应用》东莞市江坤自动化科技有限公司
一、柔性振动盘的原理 柔性振动盘是一种新型的自动化上料设备,它采用先进的音圈电机技术和柔性振动技术,实现了对各种不规则形状、微小尺寸、易损伤零部件的高效上料和分拣。 其工作原理主要包括以下几个方面: 1. 音圈电机驱动 柔性振动盘内部…...

成功使用DDNS动态域名访问我的群晖NAS(TP-link路由器)
当NAS设备部署在动态IP环境中(如家庭或小型办公室宽带),远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题,结合神卓互联NAS公网助手提供的DDNS(动态域名服务)功能,我们可以轻松实现通过…...

MySQL GROUP BY 分区大小写问题解析
在数据库操作中,GROUP BY 是一个常用的SQL语句,用于根据一个或多个列的值对结果集进行分组。然而,在使用MySQL时,你可能会遇到一个常见问题:大小写敏感性。本文将探讨MySQL中GROUP BY的大小写敏感性问题,并…...

jQuery——jQuery的基本使用
1、使用 jQuery 核心函数:$ / jQuery 2、使用 jQuery 核心对象:执行 $()返回的对象 3、引入 jQuery 函数库:可以本地引入(不用联网),也可以远程引入(需联网)…...

使用vite+react+ts+Ant Design开发后台管理项目(三)
前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…...

AUTOSAR_EXP_ARAComAPI的5章笔记(11)
5.4.5 轮询和事件驱动处理模式 接下来,我们探讨服务提供方同时支持事件驱动和轮询行为的情况。从服务实例(此处指骨架子类实例)的角度来看,服务消费者的请求(包括服务方法或字段的 getter/setter 调用)可能…...

面经3——中和农信
今天参加了中和农信的面试,先进行60分钟的笔试,笔试完参加面试,面试官有两个人,面试了大概四十多分钟,因为没有亮点的项目,简历看起来十分单薄。现在来复盘一下。 笔试 事务ACID、事务隔离级别、乐观锁的…...

线程1(重点知识)
线程 1.线程的概念: 线程是进程中的⼀个执行单元,负责当前进程中程序的执行,⼀个进程中至少有⼀个线程 ⼀个进程中是可以有多个线程 多个线程共享同一个进程的资源,每个线程参与操作系统的统一调度 可以简单理解: 进程 进程资源…...

Python中requests模块(爬虫)基本使用
Python的requests模块是一个非常流行的HTTP库,用于发送HTTP/1.1请求。 一、模块导入 1、requests模块的下载: 使用包管理器下载,在cmd窗口,或者在项目的虚拟环境目录下: pip3 install -i https://pypi.tuna.tsingh…...

快递上门取件API接口代码
官网:快递鸟 API列表 功能功能描述应用场景超区校验接口校验该地区是否支持上门取件,以及3天内可支持的上门取件时间段。场景一:寄件人老七,选择从深圳向北极村寄快递,通过超区检验接口,提前了解到深圳寄…...

sklearn特征选取之RFE
sklearn.feature_selection.RFE 是一种递归特征消除(Recursive Feature Elimination, RFE)方法,用于通过反复训练模型和消除不重要的特征,逐步减少特征数量,最终选择最重要的特征。它是一种用于特征选择的算法…...

vue.js 展示树状结构数据,动态生成 HTML 内容
展示树状结构数据: 从 jsonData 读取树状结构的 JSON 数据,将其解析并生成 HTML 列表来展示。树状结构数据根据 id 和 label 属性组织,节点可以包含子节点 children。 展示评级信息: 从预定义的表单字段 form 中读取 arRateFlag 和…...

科技赋能安全,财谷通助力抖音小店腾飞!
在数字经济的浪潮中,短视频与直播带货已成为新时代的商业风口,抖音小店作为这一领域的佼佼者,正引领着无数小微商家踏上创业与转型的快车道。然而,随着市场的日益繁荣,如何有效管理店铺、提升运营效率、保障交易安全成…...

Redis安装教程
Redis安装详细教程 📖1.单机安装Redis✅安装Redis依赖✅上传安装包并解压✅启动🧊默认启动🧊指定配置启动🧊开机自启 📖2.Redis客户端✅Redis命令行客户端✅图形化桌面客户端🧊安装🧊建立连接 大…...

Idea集成docker实现镜像打包一键部署
1.Docker开启远程访问 #修改该Docker服务文件 vi /lib/systemd/system/docker.service#修改ExecStart这行 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock将文件内的 ExecStart注释。 新增如上行。 ExecStart/usr/bin/dockerd -H fd:/…...

spring 注解 - @NotNull - 确保字段或参数值不为 null
NotNull 是 Bean Validation API(JSR 303/JSR 349)中的一个注解,用于确保一个字段或参数值不为 null。这个注解可以用于 Java 类的字段、方法的参数或者方法的返回值上,以确保在运行时这些值不为空。 使用场景 字段验证…...

408算法题leetcode--第13天
61. 旋转链表 61. 旋转链表思路:注释时间:O(n);空间:O(1) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x…...