调试与版本控制的艺术:深入探索Linux开发工具Git与GDB
接上篇 ->【Linux篇】提高效率,解决一切问题:Linux 开发者的秘密武器(中篇):本篇博客介绍了在 Linux 环境中,如何使用 make/makefile 工具进行自动化构建,以及深入理解回车、换行和行缓冲区的概念。首先,详细阐述了 make 工具的背景与历史,以及其基本使用方法,通过 Makefile 自动化构建和清理项目文件,提高开发效率。接着,介绍了回车与换行的作用和区别,并通过示例帮助大家理解它们如何影响输出结果。最后,讨论了行缓冲区的概念,及其在输入输出过程中的应用,特别是如何通过优化缓冲区提升程序的交互性和效率。通过掌握这些概念,开发者能够在 Linux 环境下更加高效地进行开发与调试,提升编程效率。接下来的篇章将继续带领大家深入探讨更多 Linux 开发技巧。
💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力!
👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力!
🚀 分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对Linux OS感兴趣的朋友,让我们一起进步!
一. 版本控制器Git
1.1 什么是版本控制器?
- 定义:
版本控制器(Version Control System,简称VCS)是一种用于记录文件或代码变化的工具,目的是帮助开发者跟踪和管理项目中的文件版本。它允许多个人同时协作工作,并且可以方便地回退到先前的版本,解决冲突并避免丢失代码。版本控制器通常用于软件开发中的源代码管理,但也可以应用于文档、设计文件等其他类型的项目。
- 功能:
版本控制器的主要功能包括:
- 跟踪文件更改:记录每次提交的代码和更改信息。
- 回滚到先前版本:如果出现问题,可以轻松恢复到先前的版本。
- 分支和合并:允许开发者并行工作,分别处理不同的功能或修复问题,之后将工作合并。
- 协作开发:多个开发者可以在同一项目上工作,版本控制工具可以帮助处理不同开发者之间的代码冲突。
最常用的版本控制工具包括:
- Git:分布式版本控制系统,功能强大,广泛应用于开源项目和企业开发。
- Subversion (SVN):集中式版本控制系统,适合一些较为简单的项目管理。
结论:版本控制不仅有助于开发者在项目中保持有序,还可以提高团队的协作效率,确保代码的安全和可追溯性。
注意 \color{Red}注意 注意:本文重点介绍Git的原理及使用,且在Ubuntu环境。
1.2 Git的历史
- Git 是由 Linus Torvalds(Linux 操作系统的创始人)在 2005 年开发的分布式版本控制系统,最初是为了解决
Linux 内核开发中使用的 BitKeeper 系统的限制问题。Linus
想要一种能够支持大规模分布式开发、高效的代码合并、以及强大的性能的版本控制工具。 - Git 采用了分布式架构,每个开发者的工作目录都有完整的版本历史记录,这使得它比传统的集中式版本控制(如
SVN)更灵活、快速,并且可以离线操作。Git 的设计重点是数据的完整性和高效性,特别在处理大规模代码库和分支管理方面表现出色。 - 随着时间的发展,Git 迅速成为开源和私有项目的主流版本控制工具,特别是与 GitHub、GitLab
等代码托管平台的结合,使得协作开发变得更加便捷。如今,Git 被广泛应用于各类项目的版本控制中,是现代软件开发的基石之一。
1.3 安装git
命令格式:
sudo apt install git
1.3.1 如何操作
将你要上传的代码与远端仓库进行链接,并在这个仓库下建立部分目录及要上传的代码。(看》git在哪就会上传它与之相连的目录及文件)
后面进行:
- git add [文件名或整个目录]
- git commit -m “相关信息”
- git push
即可将代码上传至gitee
补充:
- git log
功能:git log 是 Git 中用于查看提交历史的命令。它可以显示当前分支的提交记录,包括每次提交的哈希值、提交者信息、提交时间以及提交信息。
常用参数:
- git log --oneline:以简洁的方式显示提交记录,每个提交显示为一行,仅包括简短的哈希值和提交信息。
- git log -n :显示最近的 次提交记录。例如,git log -n 5 会显示最近的 5 次提交。
- git log --author=“”:仅显示指定作者的提交记录。
- git log --since=“2023-01-01”:显示从某个日期开始的提交记录。
- git log --graph:显示分支图形,以便查看分支和合并历史。
二. 调试器 - gdb/cgdb使用
用于调试代码如下
// mycmd.c
#include <stdio.h>
int Sum(int s, int e)
{
int result = 0;
for(int i = s; i <= e; i++)
{
result += i;
}
return result;
}
int main()
{
int start = 1;
int end = 100;
printf("I will begin\n");
int n = Sum(start, end);
printf("running done, result is: [%d-%d]=%d\n", start, end, n);
return 0;
}
- 程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程序,默认是 release模式。
- 要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项,如果没有添加,程序⽆法被编译。
总结:debug模式下才支持调试。
2.1 使用部分
进入gdb模式:
- gdb [二进制程序]
退出:
- ctrl +d / quit
常用的调试技巧如下:
- b [行号] : 在指定的行号下设置断点
- b [函数名] :在函数开头设置断点
- d [断点编号] : 删除指定的断点编号,注意断点编号不是行号
- d/delete breakpoints :删除所有的断点
- info b : 查看断点
- r :运行程序
- n/next : 逐过程
- s/steps : 逐语句
- list/l : 显⽰源代码,从上次位置开始,每次列出10⾏
- list/l 函数名 : 列出指定函数的源代码
- list/l ⽂件名:⾏号 :列出指定⽂件的源代码
- finish:执行到当前函数结尾并返回。
- p 表达式/变量:打印表达式/变量的值
- set var 变量=值(你调试后觉得它该是正确的值):修改变量的值
- c : 从当前行开始连续执行程序
- disable [断点编号] :禁用所有断点
- enable [断点编号] :启用所有编号
- display [变量名] :显示指定变量的值
- undisplay [编号] :取消对指定编号的变量的跟踪显⽰
- until 行号:执行到指定的行号
- bt :查看当前执⾏栈的各级函数调⽤及参数
- info/i locals:查看当前栈帧的局部变量值
安装cgdb
命令格式:
- Ubuntu: sudo apt-get install -y cgdb
2.2 额外调试技巧
2.2.1 watch
语法:watch 变量名
示例:
watch result
输出结果:
Continuing.
Hardware watchpoint 2: result
Old value = 0
New value = 1
Sum (s=1, e=100) at mycmd.c:7
7 for(int i = s; i <= e; i++)
2.2.2 条件断点
<1> 添加条件断点
语法:
b 9 if i == 30 # 9是⾏号,表⽰新增断点的位置
<2> 给已经存在的端点新增条件
语法:
condition 2 i30 #给2号断点,新增条件i30
三. 最后
本文介绍了Linux开发工具中的两个重要工具:Git和GDB。首先,Git作为一个分布式版本控制系统,可以帮助开发者管理代码的版本,支持团队协作,便于代码的回滚和合并。Git的基本操作包括git add、git commit、git push,并且可以使用git log查看提交历史。安装Git可以通过sudo apt install git,并且在Ubuntu环境下特别常用。接下来,文章介绍了GDB调试器,它通过调试C语言程序来帮助开发者查找和解决代码中的问题。使用GDB时,可以通过设置断点、逐步执行程序、打印变量值等方式来调试程序。此外,文章还提到了一些调试技巧,如使用watch命令监视变量的变化,使用条件断点来在特定条件下暂停程序。安装cgdb可以通过sudo apt-get install -y cgdb来实现,提供更友好的图形界面调试功能。
路虽远,行则将至;事虽难,做则必成
亲爱的读者们,下一篇文章再会!!! \color{Red}亲 爱 的 读 者 们 , 下 一 篇 文 章 再 会 ! ! ! 亲爱的读者们,下一篇文章再会!!!