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

简介: Linux命令行git和Linux调试器-gdb的使用

一、Linux命令行git

1. git是什么

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

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

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

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


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

💖 创建仓库:

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

image.png

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

💕 克隆仓库到本地

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

image.png

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

git clone 远端仓库链接

image.png

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


3. git三板斧

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

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

image.png

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

image.png

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

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

💕 指令:

git commit -m '日志'

image.png

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

image.png

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

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

image.png

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

image.png


二、Linux调试器-gdb的使用

1. debug和release的区别

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

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

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

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

image.png


2. 常用命令

gdb 可执行程序:开始调试

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

image.png

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

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

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

image.png

r:开始调试

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

image.png

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

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

image.png

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

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

image.png

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

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

image.png

n:逐过程调试

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

image.png

s:逐语句调试

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

image.png

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

image.png

undisplay:取消长显示

image.png

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

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

image.png

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

image.png

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

  • 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

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2月前
|
监控 数据可视化 Ubuntu
|
28天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
20 3
|
1月前
|
Linux 数据安全/隐私保护
适用于 Linux 的最佳命令行下载加速器
适用于 Linux 的最佳命令行下载加速器
56 3
|
4月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
68 10
|
4月前
|
安全 Linux 开发工具
探索Linux操作系统:从命令行到脚本编程
【8月更文挑战第31天】在这篇文章中,我们将一起潜入Linux操作系统的海洋,从最基础的命令行操作开始,逐步深入到编写实用的脚本。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技能。我们将通过实际代码示例,展示如何在日常工作中利用Linux的强大功能来简化任务和提高效率。准备好了吗?让我们一起开启这段旅程,探索Linux的奥秘吧!
|
4月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
188 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
4月前
|
Linux
探索Linux操作系统:命令行与脚本编程基础
【8月更文挑战第31天】在这篇文章中,我们将一起踏上一段旅程,深入探索Linux操作系统的奥秘。通过学习命令行的使用和编写简单的脚本,你将能够更高效地与你的计算机进行交流。无论你是新手还是有经验的用户,本文都将为你打开一扇通往Linux世界的大门。准备好了吗?让我们开始吧!
|
4月前
|
运维 监控 Linux
深入理解Linux系统运维:命令行与脚本的奥秘
【8月更文挑战第30天】在Linux的世界里,命令行是运维人员的灵魂之窗。掌握命令行,就像握住了一把钥匙,能开启系统管理的宝藏箱。本文将带你走进Linux的命令行世界,通过实际代码示例,解锁那些高效管理和维护系统的秘籍。你将学到不仅仅是命令本身,更是如何将这些命令编织成强大的脚本,让日常的运维工作变得游刃有余。准备好跟随我的步伐,一起深入探索Linux命令行与脚本的奥秘吧!
|
4月前
|
Linux
Linux命令行文档查看cat、less、more、head、tail和图片查看
Linux命令行文档查看cat、less、more、head、tail和图片查看
62 0
|
Java Linux 开发工具
GIT在Linux上的安装和使用简介
GIT在Linux上的安装和使用简介   GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS、Subversion不同,它不必服务器端软件支持,速度和效率也有着相当程度的提高。
1046 0
下一篇
DataWorks