Linux系统编程学习 NO.9——git、gdb

前言

本篇文章简单介绍了Linux操作系统中两个实用的开发工具git版本控制器和gdb调试器。

git

什么是git?

git是一款开源的分布式版本控制软件。它不仅具有网络功能,还是服务端与客户端一体的软件。它可以高效的处理程序项目中的版本管理。它是Linux内核的设计者Linus Torvalds为了帮助管理Linux内核开发和维护而开发的一个开放源码的版本控制软件。

如何使用git

这里我们推荐使用国内基于git,为用户提供远端代码仓库服务的网站gitee。然后手把手教你管理自己对应的本地仓库以及远端仓库。

第一步,你得注册并登录你的gitee网站的账户,在你的网页右上角有一个“+”号,点击里面的新建仓库。
在这里插入图片描述
第二步,创建远端仓库
在这里插入图片描述
第三步,将远端仓库克隆到本地仓库。首先现将远端仓库的链接拷贝下来。
在这里插入图片描述
然后打开本地环境
在终端bash命令行输入以下指令
在这里插入图片描述

git --version

如果显示出了对应的版本,则请看下一步。若显示未找到指令,则表示git还未安装。所以需要安装git。在bash命令行中输入下面指令安装git

sudo yum install -y git

当你看到本行是文字时,相信你的git也在你的本地环境已经安装,下面我们将远端仓库克隆到本地环境里,形成本地仓库。如果你是第一次安装git也会要求你提供你的身份信息,这是为了对代码进行溯源。具体提交身份信息的指令简单提供一下demo版本的。

git config --global user.email "你的email"
git config --global user.name "你的姓名"
git clone 你的远端仓库URL

在这里插入图片描述
第四步,提交本地仓库代码到远端仓库。需要用到三板斧进行相应的提交。

git add .
git commit -m "提交内容描述" 
git push

git add .命令是将你当前的目录下的文件提交到暂存区中。git commit -m 命令是将暂存区的文件提交到本地仓库中,并要求写上你在本次提交中做了什么?git push命令是将当前本地仓库的内容同步到远端仓库中。在初学时不建议通过配置文件省略用户名密码确认。

在这里插入图片描述
在这里插入图片描述

第五步,远端仓库对于本地仓库的管理。当我们需要删除或者调整代码仓库的结构时,需要在远端仓库进行相应的调整操作后,然后在本地环境中将远端仓库的操作后内容拷贝到本地仓库中。需要用到同步远端仓库内容与本地仓库内容的指令。

git pull

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以通过下面指令查看当前日志信息

git log

在这里插入图片描述
可以使用下面指令查看当前git的状态

git status

在这里插入图片描述

gdb

什么是gdb?

gdb是一款开源的源代码调试器。用于Linux环境下,C、C++、Python等编程语言的错误调试。gdb只能在debug版本下起作用,release版本是无法调试的。因为release版本对应目标的是用户,用户可不会去调试。

gdb的使用

在这里插入图片描述
这里可以看到gcc环境下默认是以release版本发布程序,如果我希望我的程序是以debug版本发布呢? 这就要使用gcc的-g选项。
在这里插入图片描述
这里可以看到debug版本程序的容量是要略大于release版本的。因为debug程序内部携带了调试信息。下面简单介绍两个gdb指令,l和q。l表示默认显示当前程序的前10代码,可以按回车换行符继续输出代码,也可以指定对应的行号显示代码。q表示退出gdb。
在这里插入图片描述
在这里插入图片描述

下面在正式介绍调试前先给大家看一下样例的源文件的代码
在这里插入图片描述
在gdb中输入r表示在gdb直接跑完当前的源代码。

在这里插入图片描述
我相信大家如果使用vs系列类似的图形化界面调试器,对断点一定不会陌生。那么在gdb下不和定义断点,如何查看断点,如何移除断点呢?且看下面的样例。
在gdb中,b + 行号 = 将对应的行号添加为断点。
在这里插入图片描述
我们平时用的图形化界面的集成开发环境中,断点是在行号的左边展示出来的。而gdb并不会在代码内容中显示断点位置。它需要通过一个指令来查看当前调试器中所有的断点。

info b

在这里插入图片描述
在gdb中跑info b指令后,当前程序的所有断点以及它们的相关信息就都能展示给用户了。那如果我要删除断点呢?这就需要用 d + 断点编号进行断点的删除。
在这里插入图片描述
在调试期间退出gdb,你上一次调试的内容数据将会被清空。
在这里插入图片描述
s表示逐过程执行,n表示逐语句执行。
在这里插入图片描述
until n行,表示直接跳转到第n行。display 变量名可以输出该变量的内容。
在这里插入图片描述