【Linux玩物志】Linux环境开发基本工具使用(终章) ——git与gdb调试器

W...Y的主页 😊

代码仓库分享 💕

 

前言:这是最后一篇Linux工具篇,今天这篇文章我们要来简单讲一件git与调试器gdb。

目录

使用 git 命令行

安装 git

在 Github 创建项目

注册账号

创建项目

​编辑 下载项目到本地

在 Gitee 创建项目 

创建项目

 下载项目到本地

三板斧第一招: git add

三板斧第二招: git commit

三板斧第三招: git push

 Linux调试器-gdb使用

背景

开始使用

调试中查看源代码

调试代码

命令总结


使用 git 命令行

安装 git

安装git就需要我们之前学习的工具yum:

命令:yum install git

Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目。它能够处理各种大小的项目,从小型项目到大型项目,如Linux内核。而我们熟知的Gitee与GitHub是提供Git仓库托管服务的平台,它们允许用户和团队托管和管理自己的Git仓库。

简而言之,Git是一个工具,而Gitee和GitHub是使用这个工具来托管和管理代码的平台,它们为用户提供了不同的服务和体验。 

在 Github 创建项目

注册账号

这个比较简单, 参考着官网提示即可. 需要进行邮箱校验.

创建项目

1. 登陆成功后, 进入个人主页, 点击左下方的 New repository 按钮新建项目

 2. 然后跳转到的新页面中输入项目名称(注意, 名称不能重复, 系统会自动校验. 校验过程可能会花费几秒钟). 校验完毕后, 点击下方的 Create repository 按钮确认创建.

3. 在创建好的项目页面中复制项目的链接, 以备接下来进行下载.

 下载项目到本地

创建好一个放置代码的目录.

git clone [url]

这里的 url 就是刚刚建立好的 项目 的链接.

在 Gitee 创建项目 

创建项目

 下载项目到本地

创建好之后点击下载或克隆 

复制上述链接到Linux中, 

git clone [url]

这里的 url 就是刚刚建立好的项目的链接即可,与GitHub相同。

三板斧第一招: git add

将代码放到刚才下载好的目录中

git add [文件名] 

将需要用 git 管理的文件告知 git

三板斧第二招: git commit

提交改动到本地

git commit . 

最后的 "." 表示当前目录。提交的时候应该注明提交日志, 描述改动的详细内容.

我们可以使用git commit -m  +” “。引号里面就写提交日志,这个日志会传到代码仓库中去。

三板斧第三招: git push

同步到远端服务器上

git push 

需要填入用户名密码. 同步成功后, 刷新 Github/Gitee 页面就能看到代码改动了。

第一次要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

 Linux调试器-gdb使用

背景

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

GDB 全称“GNU symbolic debugger”,是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。所以对于一名Linux下工作的c/c++程序员,对gdb的了解是必不可少的。

开始使用

首先我们先创建一个Linux程序。

然后通过 gcc code.c -o test -g   编译该程序,-g使该编译后的文件是debug的,可以进行调试,不然默认情况下,gcc编译的文件是release的,无法进行调试。

我们想要进入debug模式时,我们可以在makefile中进行修改:

这样我们就可以进去调试了。 

指令:

gdb +被调试文件的文件名      #进入调试

quit         #退出调试

输入gdb test.c 就可以直接对我们之前编译后的test文件进行调试,如果想退出调试,输入quit。 

gdb会记录最近一次命令,所以输入一次后可以直接回车继续显示

调试中查看源代码

指令:

list 或 l + 行号: 注意l是小写的。执行一次显示10行,显示完所有代码后会有提示。

 

 

调试代码

指令:

run 或 r:代码就会运行到结束(如果没有断电或输入)。 

 如果需要打断点:

指令:

b + 行号 :在对应的行加上断点,r后会走到离程序开始最近的断点处。

我们也可以在某个函数上打断点,只需要b+函数名即可。

 

 info + b:可以查看我们的断点信息。

 删除断点:

d + 断点编号!!!

不是d + 行号。断点编号我们就可以使用info + b查看。

我们也可以暂时关闭某处断点,在disp enb可以查看断点状态,keep y是断点开,keep n 是断点关。

关闭断点:

disable + 断点编号 

 打开断点:

enable + 断点编号

逐语句是执行main函数中的语句,遇见函数直接运行完毕但不进去。逐过程是一条一条语句执行。就如同vs中的F10逐语句,F11逐过程。

逐过程指令:

next/n

逐语句指令:

s

vs中我们有对应的窗口,可以查看我们的变量事实信息,每运行一部变量可能都在变,在Linux中怎么查看?

 指令:

p + 变量名:可以看变量的当前状态,但是只有一下,不能长时间进行监视。

display + 变量名:可以长期查看变量的状态。

undisplay + 编号:取消查看变量的状态,此编号是创建的顺序编号。

 

还有一些常用的调试命令: 

 c:从一个断点运行到下一个断点。

finish:将一个函数运行结束就停下来

until:在一个范围内运行,知道结束停下来。(这里的范围一般是指循环中)

bt:查看调用堆栈。

还有一个比较特殊的命令,当我们有一个分支条件判断时,我们进行调试:

 

当我们flag==1时会输出haha,证明if分支正确,但是我们想要测试else分支时,一般情况下我们需要进行改程序,但是在Linux中不用这样,我们有一个set var指令。

指令:
set var name = value:修改一个变量的内容(不用改代码,多分枝测试)

 

这时我们就可以测试另一个分支。

命令总结

list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数 

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

以上就是git与gdb全部内容,感谢大家观看。 

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

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

相关文章

融合基因组序列识别scATAC-seq的细胞类型

利用scATAC-seq技术进行单细胞分析,可以在单细胞分辨率下深入了解基因调控和表观遗传异质性,但由于数据的高维性和极端稀疏性,scATAC-seq的细胞注释仍然具有挑战性。现有的细胞注释方法大多集中在细胞峰矩阵上,没有充分利用潜在的…

商品指数创年内新高,粘性通胀成为美联储噩梦

文章概述 虽然美国4月CPI增幅放缓让美联储今年降息的可能性大增,但与此同时,大宗商品价格却达到了一年来的最高水平,粘性通胀可能成为美联储的噩梦。数据显示,跟踪24种能源、金属和农业合约彭博大宗商品现货指数今年以来已经上涨…

使用Flask ORM进行数据库操作的技术指南

文章目录 安装Flask SQLAlchemy配置数据库连接创建模型类数据库操作插入数据查询数据更新数据删除数据 总结 Flask是一个轻量级的Python Web框架,其灵活性和易用性使其成为开发人员喜爱的选择。而ORM(对象关系映射)则是一种将数据库中的表与面…

LeetCode题练习与总结:二叉树的最大深度--104

一、题目描述 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root […

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件开发环境搭建 IDF_V5.2.1

一、安装Visual Studio Code 下载地址:Download Visual Studio Code - Mac, Linux, Windows 打开上方链接,选择页面中的Windows版本,单击下载 将下载好的VSCodeUserSetup-x64-1.89.1.exe。单击右键,选择以管理员身份运行&#xf…

jenkins自动化部署详解

一、准备相关软件 整个自动化部署的过程就是从git仓库拉取最新代码,然后使用maven进行构建代码,构建包构建好了之后,通过ssh发送到发布服务的linux服务器的目录,最后在此服务器上执行相关的linux命令进行发布。 此篇文章jenkins…

【iOS安全】BurpSuite iOS https抓包 | DNS Spoofing

BurpSuite 完整版安装 参考:Admin Team 小数智 的博客 下载 Burp Suite 2021.6 官网下载地址 https://portswigger.net/burp/releases (下载并安装好) jdk 使用的是11.0.10 https://www.oracle.com/java/technologies/javase-jdk11-downl…

实用css整理

网页一键变灰 body{filter: grayscale(1); } 一般用于特殊时期,网页变灰,只需要给body标签添加这行样式代码。 一键换主题色 body {filter: hue-rotate(45deg);} 给body标签设置这个属性样式,改变角度看看效果吧。 设置字母大小写 p {t…

麦克纳母轮(全向)移动机器人集群控制的Simulink/Simscape虚拟仿真平台搭建

麦克纳姆轮是一种常见的全向移动机构,可以使机器人在平面内任意方向平移,同时可以利用差速轮车的属性实现自转,能够在狭窄且复杂多变的环境中自由运行,因而被广泛应用于竞赛机器人和特殊工业机器人场景。 Ps:最新的BYD仰望U8也有一…

项目启动失败,【consul】

如题,启动时项目未能正常启动,但上次都一切正常,日志提示: Consul service ids must not be empty, must start with a letter 经过排查是因为consul的consulconfigservice服务假死,导致无法正常获取到配置文件&am…

【全开源】Java无人共享棋牌室茶室台球室系统JAVA版本支持微信小程序+微信公众号

开启智能共享新时代 一、系统源码概述:引领自助服务潮流 随着科技的不断发展和人们生活节奏的加快,自助服务已逐渐成为人们生活中的一部分。为了满足市场对无人共享棋牌室、茶室、台球室的需求,我们推出了全新的无人共享系统源码。这套源码…

使用决策树对金融贷款数据进行分析

使用决策树对金融贷款数据进行分析 在本篇博客中,我们将通过使用 Python、Pandas 和多种机器学习技术,对一组贷款数据进行全面分析。通过详细的步骤展示,你将学会如何进行数据预处理、可视化分析以及构建预测模型。 第一步:导入…

Windows10安装Docker Desktop - WSL update failed

按照提示更新wsl后,仍然会报错,github上没有找到解决方法。版本28、29、30都会报这个错。 经过尝试,将docker内的设置中,采用wsl禁掉即可。如下图:

55. UE5 RPG 处理当前功能在多人模式中的问题

在UE里面,我们运行项目可以设置多种网络模式,主要是分为三种: 运行Standalone 就是单人模式,没有网络交互以监听服务器运行,在界面里运行的游戏会作为服务器使用以客户端运行,UE会单独运行一个线程作为服务…

【Linux】套接字的理解 基于TCP协议的套接字编程(单/多进程 / 线程池|英汉互译 / C++)

文章目录 1. 前言1.1 网络方面的预备知识👇1.2 了解TCP协议 2. 关于套接字编程2.1 什么是套接字 Socket2.2 socket 的接口函数2.3 Udp套接字编程的步骤2.4 sockaddr 结构 3. 代码实现3.1 makefile3.2 log.hpp3.3 tcp_server.hpp① 框架② service() 通信服务③ init…

记录docker ps查找指定容器的几个命令

1.docker ps | grep registry 查询包含registry的容器 2.docker ps | grep -E "reigistry\s" 开启正则匹配模式,匹配registry后面为空格的容器,若是匹配一整行可以这样写docker ps | grep -E "^([0-9a-f]{12})\sregistry\s.*" 这…

电视机顶盒哪个牌子好?618畅销电视机顶盒排行榜

电视机顶盒是我们使用最多的,不管看直播、动画、追剧、上网课都少不了它的存在。大促期间很多朋友问我电视机顶盒哪个牌子好,小编按照各平台的销量情况整理了618畅销电视机顶盒排行榜,看看哪些品牌的电视机顶盒是最受欢迎的吧。 TOP 1&#x…

通过扩展指令增强基于覆盖引导的模糊测试

本文由Bruno Oliveira于2024年4月25日发表于IncludeSec的官方网站上。作为IncludeSec的安全研究人员,在他们日常的安全审计和渗透测试工作中,有时需要为客户开发一些模糊测试工具。在安全评估方法中使用模糊测试技术,可以有效地在复杂的现代化…

【Basic】BUU LFI COURSE

文章目录 前言一、BUU LFI COURSE二、知识点PHP的危险函数路径遍历攻击 解题感悟 前言 话不多说直接看题 一、BUU LFI COURSE emmm什么提示也没给啊&#xff0c;那只能点开看一看线索了 okok咱们先分析一下这段php代码 <?php /*** Created by PhpStorm.* User: jinzhao*…

【HCIP学习】RSTP和MSTP

一、RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树&#xff09; 1、背景&#xff1a;RSTP从STP发展而来&#xff0c;具备STP的所有功能&#xff0c;可以兼容stp运行 2、RSTP与STP不同点 &#xff08;1&#xff09;减少端口状态 STP:disabled\blockin…