1. GDB调试器概述
GDB(GNU Debugger)是Linux环境下最强大的程序调试工具之一。作为GNU项目的重要组成部分,它支持多种编程语言(C/C++/Go等)的源代码级调试。我在嵌入式开发领域使用GDB已有8年经验,从简单的内存泄漏排查到复杂的多线程死锁分析,GDB始终是解决问题的利器。
与传统打印日志的调试方式相比,GDB具有三大核心优势:
- 实时交互性:可动态查看/修改变量值
- 精确控制:支持指令级单步执行
- 非侵入式:无需修改源代码
典型应用场景包括:
- 段错误(Segmentation Fault)定位
- 多线程同步问题分析
- 程序异常行为复现
- 核心转储(core dump)解析
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 编译带调试信息的程序
调试前必须使用-g选项编译程序:
bash复制gcc -g main.c -o demo
-g选项会生成DWARF格式的调试信息,包含:
- 源代码行号映射
- 变量类型信息
- 函数调用关系
警告:优化选项(如-O2)可能改变代码执行顺序,建议调试时使用-O0
2.2 启动GDB的三种方式
- 直接调试可执行文件:
bash复制gdb ./demo
- 附加运行中进程:
bash复制gdb -p <PID>
- 分析核心转储文件:
bash复制gdb ./demo core.1234
2.3 常用初始化配置
在~/.gdbinit中添加:
code复制set disassembly-flavor intel # 设置反汇编风格
set print pretty on # 美化结构体输出
define hook-stop # 自定义断点触发行为
info registers
backtrace
end
3. 核心调试技巧详解
3.1 断点管理实战
设置函数断点:
bash复制(gdb) b main # 在main函数入口设断点
(gdb) b *0x4005a4 # 在指定内存地址设断点
条件断点的高级用法:
bash复制(gdb) b foo.c:3
