【Linux】 开发|Git 版本控制与 gdb/cgdb 调试
版本控制器 Git1‑1 版本控制器版本控制器VCS简单说就是代码的 “时光机”。 它记录文件每一次改动保存完整历史快照可以随时查看历史、回退旧版本同时解决多人协同开发的代码合并问题。版本控制器分两大类集中式版本控制 (SVN)所有版本存放在中央服务器本地没有完整仓库断网几乎无法工作。分布式版本控制 (Git)每一台机器都拥有完整仓库副本包含全部提交历史。远程仓库只是一份备份本地可以完成绝大多数操作断网也能提交版本。Git 核心 4 个工作区域工作区 (Working Directory)我们肉眼看到的项目文件暂存区 (Stage/index)临时存放要提交的修改本地仓库 (Local Repository)本地完整版本历史数据库远程仓库 (Remote Repository)Github/Gitee 等云端仓库文件状态未跟踪 → git add → 暂存 → git commit → 本地仓库 → git push → 远程仓库。1‑2 Git 简史Git 的作者是 Linus Torvalds也就是 Linux 内核的创始人。在 2002‑2005 年间Linux 内核团队使用商业版本控制系统 BitKeeper。后续商业方收回免费使用权Linux 社区无法继续使用。2005 年Linus 两周时间写出 Git 最初版本目标明确速度快适合管理千万行级别大型内核项目完全分布式不需要中央服务器简单设计支持分支、合并完全开源免费之后 Git 迅速发展现在几乎成为全球项目的标配版本工具。1‑3 安装 GitUbuntu / Debiansudo apt update sudo apt install git配置全局身份必须配置提交代码会带上你的名字邮箱# 设置用户名 git config --global user.name your_name # 设置邮箱和github注册邮箱保持一致 git config --global user.email your_emailxxx.com查看配置git config --global --list--global代表全局配置本机所有 git 仓库生效去掉则只对当前仓库生效。1‑4 在 Github 创建项目方式 1全新仓库从远程克隆到本地打开 Github 网页点击New新建仓库填写仓库名称、简介选择 Public 公开 / Private 私有不需要初始化 README可选创建完成复制仓库地址支持两种协议HTTPS每次 push 需要输入账号密码SSH配置密钥后免密码推送推荐本地终端克隆仓库git clone gitgithub.com:xxx/xxx_repo.git cd xxx_repo方式 2本地已有项目关联 Github 远程仓库进入本地项目文件夹cd my_project git init #初始化本地git仓库生成隐藏文件夹.git关联远程仓库地址git remote add origin gitgithub.com:xxx/xxx_repo.git.git文件夹是整个版本库不要手动修改删除。常用远程仓库命令git remote -v #查看远程仓库信息 git remote remove origin #删除远程关联1‑5 Git 三板斧日常高频三板斧git add、git commit、git pushgit add把工作区修改存入暂存区git add main.c #只添加单个文件 git add src/ #添加整个文件夹 git add . #添加当前目录全部修改慎用确认没有多余文件git commit把暂存区内容提交到本地仓库生成版本快照git commit -m feat: 完成用户登录功能commit 信息尽量写清楚本次做了什么修改方便后续回溯。git push将本地仓库提交推送到 Github 远程仓库git push origin mainorigin 是远程仓库别名main 是分支名。配套高频命令git status #查看当前文件状态最常用 git log #查看提交历史记录 git pull #拉取远程最新代码到本地多人协作必用 git diff #查看文件改动内容简单工作流程修改代码 →git add→git commit→git push多人开发先执行git pull拉别人最新代码避免冲突。调试器 gdb /cgdb 使用gdbLinux 原生命令行调试器cgdbgdb 前端提供源码分屏界面操作更友好。C/C 开发排查段错误、逻辑 bug、死循环优先使用调试器不要只靠 printf 打印。2‑1 样例代码⚠️重点调试的程序编译必须加-g参数加入调试符号gdb 才能映射源码、打断点。示例代码test.c#includestdio.h int calc(int a,int b) { return a b; } int main(void) { int i; int sum 0; for(i 1; i 10; i) { sum calc(i,2); } printf(sum%d\n,sum); return 0; }编译命令gcc -g test.c -o test_debug-g生成调试信息程序体积会变大正式发布版本去掉-g。如果不加-ggdb 无法看到源码只能看汇编。2‑2 预备工作启动 gdbgdb ./test_debug启动 cgdb可视化 gdbcgdb ./test_debugcgdb 界面上半窗口源码浏览窗口下半窗口gdb 命令输入框所有 gdb 命令直接通用。2‑3 gdb 常见使用命令命令简写功能说明file ./test_debuggdb 内加载可执行文件b 行号b设置断点b 12在第 12 行打断点b 函数名b在函数入口打断点b calcrunr启动程序运行运行到断点停下nextn单步跳过执行下一行不会进入函数内部steps单步进入执行下一行遇到函数调用跳进函数内部continuec继续运行程序直到下一个断点或者程序结束finishfin执行完当前函数跳出回到调用处print 变量p打印变量的值p sumptype 变量查看变量类型listl查看源码l 5查看第 5 行附近源码btbt打印调用栈查看函数调用链路排查崩溃非常关键info breakpointsi b查看所有断点delete 断点编号d删除断点d 1删除 1 号断点quitq退出 gdb 调试器简单调试流程示例b main #在main函数打断点 r #运行程序停在main n #一行一行往下跑 p sum #查看sum变量 s #进入calc函数 bt #查看调用栈 q #退出2‑4 常见技巧‑加餐1. core 文件调试定位程序崩溃 (段错误 segfault)程序发生段错误崩溃可以生成 core 转储文件保存崩溃瞬间内存现场。打开 core 文件生成开关ulimit -c unlimited运行程序崩溃当前目录生成core.xxxx文件gdb 加载程序 core 文件直接定位崩溃位置gdb ./test_debug core.12345 btbt命令立刻看到崩溃发生在哪一行不需要复现 bug。2. 条件断点只有满足条件才触发断点循环调试神器。# 在第10行i等于5的时候才停下 b 10 if i53. 观察点 watch变量改变自动断下监控某个变量一旦变量的值发生修改程序自动停下。watch sum4. 调试时动态修改变量不用修改源码、不用重新编译调试会话直接修改内存变量。set var sum 100 p sum5. attach 附加调试正在运行的进程针对已经在后台运行的程序不需要重启直接挂载调试。#先拿到进程PID ps aux | grep ./test_debuggdb attach 12000 #传入进程PID调试结束detach脱离进程程序继续正常运行。6. display 自动打印变量每次停下自动打印变量不用反复敲 print。display sum info display undisplay 1

相关新闻

【计算机毕业设计单片机案例】集成 LCD1602 显示的酒驾智能断电防护单片机装置开发 基于 ADC0832 模数转换的酒精采集预警控制系统设计(020502)

【计算机毕业设计单片机案例】集成 LCD1602 显示的酒驾智能断电防护单片机装置开发 基于 ADC0832 模数转换的酒精采集预警控制系统设计(020502)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/11 7:54:46 阅读更多 →
从激光物理角度看 “60ps 皮秒“:技术实现难度与行业虚标乱象深度剖析

从激光物理角度看 “60ps 皮秒“:技术实现难度与行业虚标乱象深度剖析

作为一名长期关注激光技术的工程师,最近注意到医美圈里一个很有意思的现象:几乎所有皮秒设备都在宣称自己是 "60ps 脉宽"。作为技术人,第一反应是 —— 这可能吗?本文试图从激光物理和工程实现的角度,拆解 6…

2026/8/11 7:53:46 阅读更多 →
经典书单的价值与阅读指南

经典书单的价值与阅读指南

1. 为什么我们需要一份经典书单? 在这个信息爆炸的时代,每天都有成千上万的新书出版。根据最新统计,全球每年出版的新书数量超过200万种。面对如此庞大的图书海洋,很多读者都会陷入"选择困难症"——不知道该读什么&…

2026/8/11 7:53:46 阅读更多 →

最新新闻

5分钟掌握B站视频智能摘要:BiliTools AI总结功能完整指南

5分钟掌握B站视频智能摘要:BiliTools AI总结功能完整指南

5分钟掌握B站视频智能摘要:BiliTools AI总结功能完整指南 【免费下载链接】BiliTools 本项目已停止维护。 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 在信息爆炸的时代,面对B站海量视频内容,你是否曾为以下问题…

2026/8/11 19:26:01 阅读更多 →
Hanselman.Forms主题切换功能实现:LightTheme与DarkTheme无缝切换技巧

Hanselman.Forms主题切换功能实现:LightTheme与DarkTheme无缝切换技巧

Hanselman.Forms主题切换功能实现:LightTheme与DarkTheme无缝切换技巧 【免费下载链接】Hanselman.Forms The most awesome Hanselman app 项目地址: https://gitcode.com/gh_mirrors/ha/Hanselman.Forms Hanselman.Forms是一款功能丰富的跨平台应用&#xf…

2026/8/11 19:26:01 阅读更多 →
终极指南:5个简单步骤在PC上完美运行Switch游戏

终极指南:5个简单步骤在PC上完美运行Switch游戏

终极指南:5个简单步骤在PC上完美运行Switch游戏 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想要在Windows、macOS或Linux电脑上免费畅玩任天堂Switch独占游戏吗&#x…

2026/8/11 19:26:01 阅读更多 →
消息队列积压问题分析与韧性架构设计

消息队列积压问题分析与韧性架构设计

1. 消息积压:MQ系统的阿喀琉斯之踵2019年某电商大促期间,我曾亲眼目睹一个日均处理千万级消息的订单系统,因为RabbitMQ集群的突发积压,导致支付回调延迟3小时。堆积如山的消息像多米诺骨牌一样引发连锁反应——库存无法及时释放、…

2026/8/11 19:26:01 阅读更多 →
苏州活动策划展厅搭建一体化服务商筛选指南

苏州活动策划展厅搭建一体化服务商筛选指南

苏州活动策划与展厅搭建一体化服务商筛选指南在苏州地区,企业在筹备商业活动或建设品牌展厅时,常面临供应商分散、多方沟通成本高以及责任界定模糊等挑战。如何高效筛选能够同时承接“活动策划”与“展厅搭建”的一体化服务商,成为许多市场部…

2026/8/11 19:26:01 阅读更多 →
springboot甘肃旅游管理系统

springboot甘肃旅游管理系统

甘肃旅游管理系统的选题背景 甘肃省位于中国西北地区,拥有丰富的自然景观和深厚的历史文化底蕴,如莫高窟、嘉峪关、麦积山石窟等世界文化遗产,以及丹霞地貌、草原、沙漠等多样化的自然景观。随着旅游业的快速发展,甘肃省的游客数量…

2026/8/11 19:25:01 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →