惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 聂微东
MyScale Blog
MyScale Blog
H
Help Net Security
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
M
MIT News - Artificial intelligence
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
P
Proofpoint News Feed
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解
GDB调试简介与调试配置
ttkwzyttk · 2026-06-20 · via 博客园_首页

一、GDB简介

GDB,全称为GNU Debugger,是GNU项目提供的一款命令行调试工具,主要用于调试C、C++ 等语言编写的程序。在Linux开发中,GDB是非常常用的调试工具,尤其适合分析程序运行过程中的崩溃、段错误、逻辑错误以及变量变化情况。

正常情况下,我们运行一个程序时,只能看到程序最终的执行结果。如果程序中出现错误,例如数组越界、空指针访问、死循环等问题,单靠输出信息往往很难快速定位问题所在。而使用GDB后,可以让程序按照调试者的控制逐步执行,并在执行过程中观察程序内部状态。

在后面的教程与学习当中,主要讲解GDB的各类基本功能包括:

1、断点管理
2、查看与修改变量
3、内存查看与修改
4、寄存器查看与修改
5、源代码查看与管理
6、函数调用栈管理
7、多线程调试
8、core dump文件调试
9、发行版程序调试

每个小节中都会列出示例程序,并逐步进行调试讲解

二、开发调试环境准备

因为这系列教程主要是在kubuntu24.04的环境下进行,所以需要先在Linux环境下配置好开发调试环境,主要用到gccg++gdb等软件。安装命令如下

sudo apt install gcc g++ make gdb

三、GDB调试编译选项

在使用GDB调试程序之前,通常需要在编译程序时添加调试符号。调试符号中保存了源代码和可执行程序之间的对应关系,例如变量名、函数名、源文件名、代码行号等信息。

如果没有调试符号,程序仍然可以被GDB启动,但是调试体验会非常差。可能只能看到汇编指令、内存地址和部分函数地址,而无法准确显示源代码行号,也无法方便地查看变量名。

例如,下面是一个普通的编译命令:

gcc main.c -o main

这种方式生成的可执行程序通常不包含完整的调试信息。为了让GDB能够更好地调试程序,需要加上-g选项:

gcc -g main.c -o main

在实际开发中,为了让调试结果更容易理解,通常还会关闭编译优化。例如:

gcc -g -O0 main.c -o main

其中,-O0表示关闭优化。因为开启优化后,编译器可能会调整代码执行顺序、内联函数、删除未使用变量等,这会导致GDB中看到的执行过程和源代码不完全一致。因此,在学习和调试阶段,常用的编译方式是:

gcc -g -O0 main.c -o main

讲解了GDB的简介与前置编译选项之后,就可以启动gdb对编译完成的可执行程序进行调试了。