【Linux篇】Git和GDB深度剖析:让Linux开发更高效(下篇)

接上篇 ->【Linux篇】提高效率,解决一切问题:Linux 开发者的秘密武器(中篇):本篇博客介绍了在 Linux 环境中,如何使用 make/makefile 工具进行自动化构建,以及深入理解回车、换行和行缓冲区的概念。首先,详细阐述了 make 工具的背景与历史,以及其基本使用方法,通过 Makefile 自动化构建和清理项目文件,提高开发效率。接着,介绍了回车与换行的作用和区别,并通过示例帮助大家理解它们如何影响输出结果。最后,讨论了行缓冲区的概念,及其在输入输出过程中的应用,特别是如何通过优化缓冲区提升程序的交互性和效率。通过掌握这些概念,开发者能够在 Linux 环境下更加高效地进行开发与调试,提升编程效率。接下来的篇章将继续带领大家深入探讨更多 Linux 开发技巧。

💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力!
👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力!
🚀 分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对Linux OS感兴趣的朋友,让我们一起进步!

一. 版本控制器Git

1.1 什么是版本控制器?

  • 定义:

版本控制器(Version Control System,简称VCS)是一种用于记录文件或代码变化的工具,目的是帮助开发者跟踪和管理项目中的文件版本。它允许多个人同时协作工作,并且可以方便地回退到先前的版本,解决冲突并避免丢失代码。版本控制器通常用于软件开发中的源代码管理,但也可以应用于文档、设计文件等其他类型的项目。

  • 功能:

版本控制器的主要功能包括:

  1. 跟踪文件更改:记录每次提交的代码和更改信息。
  2. 回滚到先前版本:如果出现问题,可以轻松恢复到先前的版本。
  3. 分支和合并:允许开发者并行工作,分别处理不同的功能或修复问题,之后将工作合并。
  4. 协作开发:多个开发者可以在同一项目上工作,版本控制工具可以帮助处理不同开发者之间的代码冲突。

最常用的版本控制工具包括:

  1. Git:分布式版本控制系统,功能强大,广泛应用于开源项目和企业开发。
  2. Subversion (SVN):集中式版本控制系统,适合一些较为简单的项目管理。

结论:版本控制不仅有助于开发者在项目中保持有序,还可以提高团队的协作效率,确保代码的安全和可追溯性。

注意 \color{Red}注意 注意:本文重点介绍Git的原理及使用,且在Ubuntu环境。

1.2 Git的历史

  1. Git 是由 Linus Torvalds(Linux 操作系统的创始人)在 2005 年开发的分布式版本控制系统,最初是为了解决
    Linux 内核开发中使用的 BitKeeper 系统的限制问题。Linus
    想要一种能够支持大规模分布式开发、高效的代码合并、以及强大的性能的版本控制工具。
  2. Git 采用了分布式架构,每个开发者的工作目录都有完整的版本历史记录,这使得它比传统的集中式版本控制(如
    SVN)更灵活、快速,并且可以离线操作。Git 的设计重点是数据的完整性和高效性,特别在处理大规模代码库和分支管理方面表现出色。
  3. 随着时间的发展,Git 迅速成为开源和私有项目的主流版本控制工具,特别是与 GitHub、GitLab
    等代码托管平台的结合,使得协作开发变得更加便捷。如今,Git 被广泛应用于各类项目的版本控制中,是现代软件开发的基石之一。

1.3 安装git

命令格式:

sudo apt install git

1.3.1 如何操作

将你要上传的代码与远端仓库进行链接,并在这个仓库下建立部分目录及要上传的代码。(看》git在哪就会上传它与之相连的目录及文件)

后面进行:

  1. git add [文件名或整个目录]
  2. git commit -m “相关信息”
  3. git push

即可将代码上传至gitee

补充:

  • git log

功能:git log 是 Git 中用于查看提交历史的命令。它可以显示当前分支的提交记录,包括每次提交的哈希值、提交者信息、提交时间以及提交信息。

常用参数:

  1. git log --oneline:以简洁的方式显示提交记录,每个提交显示为一行,仅包括简短的哈希值和提交信息。
  2. git log -n :显示最近的 次提交记录。例如,git log -n 5 会显示最近的 5 次提交。
  3. git log --author=“”:仅显示指定作者的提交记录。
  4. git log --since=“2023-01-01”:显示从某个日期开始的提交记录。
  5. 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}亲 爱 的 读 者 们 , 下 一 篇 文 章 再 会 ! ! ! 亲爱的读者们,下一篇文章再会!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值