1. 为什么每个开发者都需要掌握GDB
在Linux环境下开发C/C++程序时,遇到程序崩溃、逻辑错误或性能问题时,GDB(GNU Debugger)就像外科医生的手术刀,能精准定位病灶所在。我曾在排查一个多线程死锁问题时,用常规打印日志的方式花了三天毫无进展,而使用GDB的thread apply all bt命令在10分钟内就锁定了问题线程的调用栈。
GDB的强大之处在于它能:
- 实时查看任意变量的内存状态
- 动态修改程序执行流程
- 捕获特定条件下的异常事件
- 反汇编机器指令级调试
- 支持远程调试嵌入式设备
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. GDB环境配置与基础命令
2.1 编译带调试信息的程序
调试前必须用-g选项编译程序:
bash复制gcc -g main.c -o demo
注意:优化选项
-O2会改变代码执行顺序,建议调试时添加-O0禁用优化
2.2 启动GDB的三种方式
-
直接调试可执行文件:
bash复制
gdb ./demo -
附加到运行中的进程:
bash复制gdb -p 1234 # 1234为进程PID -
分析核心转储文件:
bash复制
gdb ./demo core.1234
2.3 必须掌握的10个基础命令
| 命令 | 缩写 | 功能说明 |
|---|---|---|
| run | r | 启动程序 |
| break | b | 设置断点 |
| next | n | 单步跳过函数调用 |
| step | s | 单步进入函数调用 |
| p | 打印变量值 | |
| backtrace | bt | 显示调用栈 |
