《Linux系统编程》6.Linux基础开发工具(下)-git,gdb/cgdb

《Linux系统编程》6.Linux基础开发工具(下)-git,gdb/cgdb

💡Yupureki:个人主页

✨个人专栏:《C++》 《算法》《Linux系统编程》


🌸Yupureki🌸的简介:


目录

1. git的概念与使用

1.1 git的概念

1.2 git的作用

1.3 安装git

1.4 github/gitee与git的关系

1.5 git三板斧

git add

git commit

git push

1.6 git的其余操作

2. gdb/cgdb调试器的使用

2.1 准备工作

2.2 cgdb的使用

2.2.1 打断点

2.2.2 运行程序

2.2.3 单步执行

2.2.4 监视变量


1. git的概念与使用

不知道你工作或学习时,有没有遇到这样的情况:我们在编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个副本,比如:

“报告-v1”
“报告-v2”
上特就
“报告-v3”
“报告-确定版”
“报告-最终版”
“报告-究极进化版”

每个版本有各自的内容,但最终会只有一份报告需要被我们使用。
但在此之前的工作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的文件就越来越
多,文件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各自都是修改了什么
吗?

文档如此,我们写的项目代码,也是存在这个问题的!!

1.1 git的概念

简单来说,Git 是一个“版本控制系统”

你可以把它想象成一个“超级备份记录员”,专门帮你管理文件和项目的历史记录。为了让你更容易理解,我们可以用一个游戏存档的比喻:

 一个比喻:Git 就像游戏存档

想象一下你在玩一个非常宏大的角色扮演游戏(比如《巫师3》或《塞尔达传说》)。

  • 没有 Git 的情况: 你只能一直往下玩,如果不小心操作失误、选错对话导致坏结局,或者游戏崩溃存档损坏,你可能就只能从很远的之前重新开始,或者彻底重来。
  • 有 Git 的情况: 你可以在每一个关键节点手动存档
    • 你在做主线任务前存个档(git commit)。
    • 你想尝试杀掉一个NPC看看剧情发展,但又怕后果,先存个档。
    • 过了几天,你发现新尝试的路线导致任务失败了,没关系,你可以读档git checkout)回到之前那个安全的存档点。

Git 就是这样一个工具,但它比游戏存档更强大:

  • 可以写日志: 每次存档你都可以写下备注,比如“修复了登录页面的崩溃Bug”或“添加了购物车功能”。
  • 可以开分支: 如果你想尝试一个疯狂的想法,又怕搞乱主项目,你可以“开一个新档”(创建分支)去玩,玩好了再合并回来,玩砸了直接删除这个存档就当没发生过。
  • 可以协作: 你的朋友也在玩这个游戏,Git 允许你们俩把自己的存档分享给对方,互相合并进度,共同推进游戏进程。

1.2 git的作用

在程序员的世界里,Git 主要用来管理代码,但它其实可以管理任何类型的文件(Word文档、设计稿等)。

它的核心功能有三个:

  1. 记录快照(存档): 它会记录下每一次你对文件做出的修改。你可以随时回到任何一个历史版本。
  2. 分支管理(平行宇宙): 它允许你从主线上分出一个“分支”出来,在这个分支上随便改,不会影响主线。改好了,再把它合并回主线。
  3. 协同合作(共享存档): 它让多个开发者可以同时在一个项目上工作。A 写了这部分代码,B 写了那部分代码,Git 负责把他们俩的代码智能地合并在一起。如果两人改了同一行代码,Git 也会提示“冲突”,让程序员来决定最终用哪个。

1.3 安装git

apt/yum install git

1.4 github/gitee与git的关系

常见误区:Git 不等于 GitHub

很多人会把这两个词混用,其实它们不一样:

  • Git: 是工具,是安装在你自己电脑上的软件,负责管理你本地的版本历史。
  • GitHub/GitLab/Gitee: 是网站,是存放代码的云盘。你可以把本地的 Git 存档(也就是你的项目)推送到这些网站上备份,或者从上面下载别人的开源项目。

总结一下:
Git 就像你写论文时的“历史记录”功能,但它是超级增强版。它让你不再需要手动创建一堆文件名像“毕业论文_初稿.doc”、“毕业论文_修改2.doc”、“毕业论文_打死也不改了.doc”这样的文件,而是通过简单的命令,优雅地管理所有版本。

使用github:【2025版】最新GitHub新手用法详解(适合新手入门)零基础入门到精通,收藏这篇就够了_github使用详解-ZEEKLOG博客

使用gitee:gitee使用教程(手把手,简单详细,中文包)_gitee怎么用-ZEEKLOG博客

1.5 git三板斧

git add

git add会将你的文件"暂存",还没有进行保存

git add [文件名]

git commit

git commit通常加入描述,通常指这一版进行了哪些修改,在项目中十分常见。这样你的文件就在本地仓库进行了保存

git commit -m "xxxxx"

git push

git push会将你在本地仓库的文件推送到远端

git push

1.6 git的其余操作

命令作用
git init初始化仓库
git clone <地址>下载远程项目到本地
git status查看当前状态
git add <文件>添加文件到暂存区
git commit -m "备注"提交暂存区文件,生成新版本
git log查看提交历史
git branch列出分支
git checkout <分支名>切换分支
git merge <分支名>合并某分支到当前分支
git push推送本地提交到远程
git pull拉取远程更新到本地

2. gdb/cgdb调试器的使用

GDB(GNU Debugger)是Linux下最常用的C/C++程序调试工具。它支持断点、单步执行、查看变量、堆栈追踪等功能。

但传统的gdb过于简陋,十分不人性化,因此我们使用gdb的加强版-cgdb,支持实时窗口的查看

apt/yum install cgdb

2.1 准备工作

准备代码test.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; }

cgdb只能编译DEBUG版的可执行程序,而我们gcc/g++编译出的可执行程序默认为RELEASE版,因此在编译时,我们得加入-g选项,使得可执行程序为DEBUG版

g++ -g test.c -o test

之后使用cgdb调试可执行程序:

cgdb [DEBUG程序名]

2.2 cgdb的使用

常用GDB命令

命令简写作用
break 行号/函数名b设置断点(如 b 10 b main
runr运行程序
nextn单步执行,不进入函数内部
steps单步执行,进入函数内部
continuec继续运行,直到下一个断点
print 变量/表达式p打印变量或表达式的值
backtracebt查看函数调用栈
info breaki b查看所有断点信息
delete 断点编号d删除指定断点
listl显示源代码(默认当前行前后)
quitq退出GDB

当我们第一使用cgdb时,会进入这个界面

之后我们要调试,得在下面的gdb命令行输入指令

2.2.1 打断点

我们在命令行输入b [你要打断点的行数/函数名],就可以打断点了

输入i b 来查看所有的断点信息

输入 d [断点号]来删除对应的断点

2.2.2 运行程序

我们输入r,会从main函数开始,自动在你的第一个断点处停下来。因此,如果你没有打断点,那么运行后会直接结束程序

当运行后,我们输入c,会跳转到下一个断点

2.2.3 单步执行

我们可以输入n或者s来一步一步走,这两个方法的具体差异:

nextn单步执行,不进入函数内部
steps单步执行,进入函数内部
注意

当你按s尝试进入你自己的函数时,可能报错。这是因为你试图单步进入一个库函数(比如 printfputsmalloc 等),而 GDB 想显示该函数的源代码,但系统中没有安装该库的调试符号和源代码文件ioputs.c 是 glibc 内部实现 puts 的一个源文件,你的系统里没有它,所以 GDB 报错找不到文件。

因此这里我建议不用s进入,而是直接给你的函数名打断点,用c跳转

如果你已经不小心进入了库函数(比如卡在 ioputs.c 里),可以输入:finish

它会执行完当前函数并返回到调用处。

2.2.4 监视变量

watch 变量

设置观察点,变量值变化时停下

display 变量

每次停下都自动显示该变量

undisplay 编号 则为取消自动显示

set var 变量=值

在调试中修改变量值

掌握以上基本命令,就能应对大多数调试场景。GDB功能强大,更多细节可通过 help 命令或查阅官方文档深入学习。

Read more

一站式开源AI平台Cherry Studio本地部署与远程调用本地大模型

一站式开源AI平台Cherry Studio本地部署与远程调用本地大模型

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨ 博客目录 * 前言

By Ne0inhk
Git 远程操作全攻略:从基础到实战

Git 远程操作全攻略:从基础到实战

🌈 个人主页:Zfox_ 🔥 系列专栏:Git 企业级应用 目录 * 一:🔥 理解分布式版本控制系统 * 二:🔥 远程仓库 * 🦋 新建远程仓库 * 🦋 克隆远程仓库 * 🦋 向远程仓库推送 * 🦋 拉取远程仓库 * 三:🔥 配置Git * 🦋 忽略特殊⽂件 * 🦋 给命令配置别名 * 四:🔥 标签管理 * 🦋 理解标签 * 🦋 创建标签 * 🦋 操作标签 * 五:🔥 多⼈协作 * 🦋 多⼈协作⼀ * 🦋 多⼈协作⼆ * 🎀 远程分⽀删除后,本地gitbranch-a依然能看到的解决办法 * 六:🔥 共勉 一:🔥 理解分布式版本控制系统 🦈 我们⽬前所说的所有内容(⼯作区,暂存区,版本库 等等),都是在本地!也就是在你的笔记本或者计算机上。⽽我们的Git其实是分布式版本控制系统!什么意思呢? 可以简单理解为,我们每个⼈

By Ne0inhk

开源又实用!CAM++系统为何值得你立刻尝试

开源又实用!CAM++系统为何值得你立刻尝试 1. 这不是另一个语音识别工具,而是一个真正能落地的说话人验证方案 你有没有遇到过这样的场景:需要确认一段录音是不是某位同事说的?想快速判断客服通话中两个声音是否来自同一人?或者在安防系统里,需要从一段监控音频中验证说话人身份?市面上很多语音识别工具只告诉你“说了什么”,但CAM++解决的是更关键的问题——“谁说的”。 CAM++不是语音转文字(ASR),也不是语音合成(TTS),它专注一个被长期低估却极其重要的能力:说话人验证(Speaker Verification)。简单说,它不关心内容,只认声音本身。就像指纹或虹膜识别一样,它把人的声纹变成一串可计算、可比对的数字特征。 更难得的是,这个系统完全开源、开箱即用、中文优化、部署极简。不需要GPU服务器,一台普通开发机就能跑;不需要写代码,点点鼠标就能完成专业级声纹分析;不需要调参经验,预设阈值开箱即准。它不像学术模型那样只停留在论文里,也不像商业API那样藏着高昂费用和隐私风险——它就安静地运行在你的本地机器上,数据不出门,结果自己掌控。 如果你正在寻找一个真正能放进工作流

By Ne0inhk
【工创赛2025-智能物流搬运塔吊方案开源(2分15秒)】西安理工大学工程训练中心

【工创赛2025-智能物流搬运塔吊方案开源(2分15秒)】西安理工大学工程训练中心

一、前言        时光荏苒,岁月如梭。三年的本科竞赛生涯随着工训赛的结束告一段落。竞赛路途中,受到了诸多大佬的帮助和鼓励。为了将这份开源精神传递下去,本团队全体成员一致决定无偿开源本项目机械设计图纸、PCB设计、电控代码、视觉代码及镜像文件、参赛文档以及其他有关设计资料。        请注意,本项目开源文件完全免费,内容遵循CC 4.0 BY-NC-SA版权协议,转载请给出适当的署名,不可用作商业用途,严禁倒卖,若广大网友发现以上行为,请第一时间与我取得联系。        在此,由衷感谢西安理工大学工程训练中心的各位老师对我们竞赛项目的悉心指导与鼎力支持。         这里放一张二代小车同堂的照片作为纪念 二、关于开源项目        运行视频:[开源]2025工训赛智能物流搬运,初赛第八,2分26秒_哔哩哔哩_bilibili        本项目参与了2025年中国大学生工程实践与创新能力大赛全国总决赛,初赛成绩仅1个二环,其余均为一环,总时间2分26秒。决赛由于准备不足以及现场不可预料的因素,成绩不算理想,最后总成绩为全国特等奖。

By Ne0inhk