版本控制器git及gdb调试技巧深度剖析

目录

一、前言
二、Git

1、Git安装

2、Gitee

(1)注册与配置

(2)本地推送到Gitee

[<1> 新建仓库](#<1> 新建仓库)

[<2> 代码推送](#<2> 代码推送)

三、gdb

1、调试须知

2、调试用法

3、cgdb

四、结语

一、前言

在日常工作或学习中,为了防止编写的项目代码丢失,更改失误,失误后能恢复到原来的版本,此时就不得不复制出一个副本,然而随着修改次数的增多,版本数量也不断增多,每个版本都有各自的内容,但最终只有一个版本会被使用,为了方便管理这些不同版本的代码,便有了版本控制器,版本控制器是一个可以了解文件历史、以及该文件发展过程的系统,版本控制器可以记录代码的每一次改动和版本迭代,Git就是目前较为主流的版本控制器,自2005年诞生以来,Git日臻成熟完善,极其适合管理项目代码。gdb作为一款GNU调试器,有着强大的底层控制力,兼容C/C++、Java等多种语言,同时也支持Linux、macOS、Windows等大多平台,是许多IDE和前沿工具的底层调试引擎,本文将围绕版本控制器Git和gdb调试展开介绍,git、gdb有着强大的代码管理和调试能力,是项目开发过程中值得掌握的高效工具。

二、Git

1、Git安装

在Linux CentOS/RHEL 7上可以使用yum作为包管理器来安装Git,命令如下:

bash 复制代码
yum install git

安装完成后,可通过下述指令来查看Git版本是否安装成功

bash 复制代码
git --version

结果如下图所示:

2、Gitee

Gitee是目前较受欢迎的代码托管平台,相当于中国版的Github,gitee访问速度快,对中文支持友好,提供了免费的私有代码仓库,值得开发者进行代码托管。

(1)注册与配置

注册:访问gitee.com来完成注册,并进行邮箱的绑定

安装:本地环境需安装Git,Windows可去官网下载小乌龟插件,如下图所示:

Linux环境下安装Git上面已作介绍,这里不再赘述。

配置:安装后打开终端,进行身份信息的设置

bash 复制代码
git config --global user.name "用户名"
git config --global user.email "注册邮箱"

(2)本地推送到Gitee

<1> 新建仓库

首先需先在Gitee上创建仓库,并进行相关仓库信息的填写:

填写完成后,点击创建即可生成该仓库的具体链接,如下图所示:

复制该仓库链接,以备后续添加该远程仓库的地址进行代码推送。

<2> 代码推送

在本地项目文件夹中,打开终端,通过git init先对本地仓库进行初始化

bash 复制代码
git init # 初始化本地仓库

初始化本地仓库后,进行远程仓库地址的添加,需添加已创建仓库的链接

bash 复制代码
git remote add origin https://gitee.com/gitee-submission.git # 添加远程仓库地址

再通过git add将所需文件添加到暂存区,将需要用git管理的文件告知git

bash 复制代码
git add code.cpp # 添加文件到暂存区

git commit -m将其提交到本地仓库,提交时注明文件相关内容

bash 复制代码
git commit -m "代码提交" # 提交到本地仓库

最后通过git push将其推送到gitee仓库

bash 复制代码
git push -u origin master # 推送到远程master分支

根据相应提示输入用户名、密码即可完成gitee代码的提交,如下图所示:

完成提交后,可在gitee上查看仓库相关内容及提交文件代码

在仓库gitee提交上就可以看到已提交的文件code.cpp及代码,提交完成后,可积累相应的贡献度,如下所示:

至此,就完成了将本地代码文件推送到Gitee。

三、gdb

1、调试须知

程序的发布方式有两种,debug和release模式,Linux gcc/g++编译出来的二进制程序,默认为release模式,若要使用gdb调试,则需在源代码生成二进制程序的基础上,加上-g选项。

gcc code.c -o code没加-g选项为release模式,不支持调试

bash 复制代码
[root@iZbp1gryn5x1pfh5s4g3t3Z code]# gcc code.c -o code   # release模式,不支持调试
[root@iZbp1gryn5x1pfh5s4g3t3Z code]# file code
code: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=20b989ef5c64b9897eb4564a97e8c8b2b415d27b, for GNU/Linux 3.2.0, not stripped

gcc code.c -o code -g为debug模式,可调试

bash 复制代码
[root@iZbp1gryn5x1pfh5s4g3t3Z code]# gcc code.c -o code -g # debug模式,可调试
[root@iZbp1gryn5x1pfh5s4g3t3Z code]# file code
code: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=868c8e09a49c46da10b96e685ce8f24359741443, for GNU/Linux 3.2.0, with debug_info, not stripped

通过file code可查看code文件类型,with debug info,为debug模式

2、调试用法

开始调试:

bash 复制代码
gdb code # 开始调试

常用调试指令:list/l,用于显示源代码,从当前位置开始,每次列出10行,如下所示:

r/run:从程序当前位置开始执行,直到运行到断点处或程序结束

b/break:在指定行号设置断点,如b 17表示在第17行设置断点

条件断点:在添加断点的基础上增加相关条件,当条件满足时触发该断点,添加条件断点的方式如下

新增断点:b 行号 if (条件)

给已有断点追加条件:condition 断点编号 条件

n/next:单步执行,不进入函数内部,相当于VS的逐过程调试F10

s/step:单步执行,进入函数内部,相当于VS的逐语句调试F11

info b/break:用于查看当前所有断点的信息

finish:执行到当前函数返回,然后停止

p/print:用于打印变量/表达式的值

c/continue:从当前位置开始执行程序

d/delete:删除所有断点

d/delete n:删除断点序号为n的断点

disable:禁用断点

enable:启用断点

display:用于跟踪显示指定变量的值

undisplay:取消对指定编号变量的跟踪显示

until:执行到指定行号

watch:用于执行时监视一个表达式/变量的值,当设置完watch后,输入c让程序继续执行,如果监视的表达式在程序运行期间的值发生变化,gdb会暂停程序的执行,并通知

watch在用于排查错误效率很高,如果有一些变量不应该被修改,怀疑该变量修改导致了错误,可以watch该变量,以此监视该变量的变化。

set var确定问题原因:

如上面的result计算出错,根据set var确定出是标志位flag的原因。

quit/Ctrl+d:退出调试

3、cgdb

除了gdb调试,还可以使用cgdb进行调试,cgdb调试相比gdb调试更加直观,二者的调试命令基本相同。

Ubuntu环境下安装cgdb:

bash 复制代码
sudo apt-get install -y cgdb

Centos环境下安装cgdb:

bash 复制代码
sudo yum install -y cgdb

开始调试:

bash 复制代码
[root@iZbp1gryn5x1pfh5s4g3t3Z code]# cgdb code

即可开始调试,cgdb调试命令与gdb基本一致。

cgdb本质上是给gdb套上了一个可视化外壳,相当于gdb的增强版终端界面,保留了gdb所有的调试命令,同时也解决了gdb无法实时查看源码的痛点,cgdb的核心优势在于将屏幕分为上下两个窗口,上方代码窗口可以高亮显示当前执行的代码行,设置或查看断点,代码阅读和定位都非常方便,下方命令窗口保留了gdb的所有调试指令,上下窗口调试起来非常直观。

四、结语

本文主要围绕版本控制器Git/Gitee及gdb/cgdb调试展开介绍,对于版本控制器Git,着重介绍了如何将本地文件代码推送到Gitee,Gitee是目前较为主流的代码托管平台,访问速度快,提供了免费的个人私有仓库,为开发者提供了稳定、快速的Git代码托管服务,值得开发者进行代码托管。gdb/cgdb是Linux/Unix环境下较为常用的调试工具,属于轻量级调试工具且贴近底层,控制力较强,cgdb在gdb的基础上增加了可视化界面,更加直观,上方为代码窗口,实时显示源码,下方为命令窗口,保留了gdb所有的调试命令,调试起来更加方便。在日常开发过程中,常常将Git与gdb二者结合起来使用,Git可以记录代码的每一次修改,同时也方便回溯其历史,极其适合管理大型项目代码,是代码的"时光机",gdb/cgdb则是代码稳定运行的"显微镜",属于轻量级调试器,资源占用小,强大灵活,无界面依赖,将Git与gdb二者结合,真正意义上实现代码的时空管理!

相关推荐
番茄去哪了17 小时前
苍穹外卖day05----店铺营业状态设置
java·数据库·ide·redis·git·maven·mybatis
leo_23221 小时前
广域网--SMP(软件制作平台)语言基础知识之六十六
开发工具·企业信息化·smp(软件制作平台)·应用系统·eom(企业经营模型)
leo_2322 天前
路由器--SMP(软件制作平台)语言基础知识之六十五
开发工具·企业信息化·smp(软件制作平台)·应用系统·eom(企业经营模型)
键盘鼓手苏苏2 天前
Flutter for OpenHarmony:git 纯 Dart 实现的 Git 操作库(在应用内实现版本控制) 深度解析与鸿蒙适配指南
开发语言·git·flutter·华为·rust·自动化·harmonyos
没有bug.的程序员2 天前
Git 高级进阶:分支管理模型内核、Rebase 物理重塑与版本控制协作深度实战指南
java·git·分支管理·版本控制·rebase
一苓二肆2 天前
Git 常用指令总结(工程实战版)
大数据·git·elasticsearch
叶 落3 天前
Windows 安装 Git
git
聂 可 以3 天前
Windows环境Git安装教程(下载Git安装包、安装Git、验证Git是否安装成功)
windows·git
阿寻寻3 天前
【云原生技术】git checkout --.什么意思
git