一、版本控制器 Git
在编写文档或代码时,为了防止丢失或修改失误,常需保留多个版本。随着版本增多,管理变得困难。能记录文件的历史和改动过程,方便多人协同。
介绍 Linux 下 Git 版本控制工具的基础操作及 GDB 调试器的使用方法。内容包括 Git 的安装、核心概念(分布式、暂存区)、常用命令(clone、add、commit、push、log、status、pull、gitignore)及冲突处理。同时讲解 GDB 和 CGDB 调试器的安装、Debug 与 Release 模式区别,以及断点设置、单步执行、变量监视、条件断点等调试技巧。旨在帮助开发者掌握代码版本管理和程序调试的基本技能。

在编写文档或代码时,为了防止丢失或修改失误,常需保留多个版本。随着版本增多,管理变得困难。能记录文件的历史和改动过程,方便多人协同。
目前最主流的版本控制器是 Git。它能控制所有格式文件,对开发人员而言,最重要的是管理源代码。
Linux 内核开源项目早期使用 BitKeeper。2005 年合作结束后,Linus Torvalds 基于经验开发了 Git。目标包括:速度、简单设计、支持非线性分支、完全分布式、高效管理大规模项目。
Git 记录每次的修改和版本迭代。它仅能跟踪文本文件的改动(如代码、txt),对于图片视频等二进制文件只能看到大小变化。
gitee 和 github 是基于 Git 的工具,用于完成本地仓库和远程仓库同步的网站。
git 支持 Windows 和 Linux。
打开 Git 官网下载页,自动下载适配版本。双击安装包,一路点击'Next'(默认选项足够)。安装完成后,右键桌面出现'Git Bash Here'即成功。
Git 是去中心化的、分布式的版本控制器。
Git 是 CS 一体的:指同时具备「客户端」本地完整工作能力和「服务端」协作中转能力。
从远程仓库克隆代码到本地。.git 目录才是真正的仓库,包含修改记录。
Git 核心区域分为工作区、暂存区和本地仓库。
git add 把修改信息添加到本地仓库的暂存区。
git commit -m"XXX" 把修改信息提交到本地仓库中(从暂存区到版本链)。
git push 本地仓库和远端仓库同步。
逆向显示提交记录。
实时显示当前工作区、暂存区与本地仓库之间的文件状态差异,引导下一步操作。
将远程仓库中指定分支的最新提交拉取并合并到本地,确保本地与远程一致。
纯文本配置文件,告诉 Git 哪些文件或目录不需要进行版本追踪。例如 *.zip 忽略所有 zip 压缩包。
如果多人同时修改代码,直接提交可能失败。需先同步远端仓库和本地仓库(利用 pull),更新后再 push。仓库会强制代码同步。
GDB 和 CGDB 都是调试器,CGDB 在 GDB 基础上增加了简单的可视化界面。
GDB 在系统里默认安装。 CGDB 需另外下载(CentOS: yum, Ubuntu: apt)。
程序发布方式有两种:Debug(开发自测)和 Release(测试人员)。
注意:Release 方式下不能调试。gcc/g++ 编译默认以 Release 版本发布。
默认编译无法调试。需要加上 -g 选项生成 Debug 版本,添加可调试信息(体积变大)。
gcc -g main.c -o main
调试的本质是找到问题,目的是解决问题。辅助工具帮助找到问题,程序员解决。
推荐使用 CGDB(半图形化界面)。
b [文件名:] 行号:在指定行设置断点。b 函数名:在函数开头设置断点。info b:查看当前所有断点信息。d 行号:删除该行断点。断点本质是让程序停下来。断点可以被使能(enable)或禁用(disable)。
continue / c:从当前位置连续执行直到下一个断点。p/print:打印变量值。s (step):逐语句,进入函数内部。n (next):逐过程,不进入函数内部。until:直接跳转到给定行号。finish:执行当前函数返回并停止。display:显示监视的变量。undisplay:取消显示监视的变量。示例:
// mycmd.c
#include <stdio.h>
int flag = 0;
int Sum(int s, int e) {
int result = 0;
for(int i = s; i <= e; i++) {
result += i;
}
return result * flag;
}
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;
}
在 GDB 中:
(gdb) l main
(gdb) b 24
(gdb) r
(gdb) p flag
$2 = 0
(gdb) set var flag=1
(gdb) p flag
$3 = 1

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online