文章目录
- 0 、GDB 是什么?为什么需要它?
- 1 、准备工作:编译带调试信息
- 2、基础:断点、运行、查看
- 2.1 启动 GDB
- 2.2 断点 (break)
- 2.3 运行程序
- 2.4 单步执行
- 2.5 查看变量
- 2.5 常用指令集合
- 2.5.1 where
- 2.5.2 shell cls
- 2.5.3 gdb模式下 如何重新开始运行
- 2.5.4 删除特定编号断点和全部断点
- 2.5.5 quit
- 3、中级命令:条件断点、观察点、调用栈
- 3.1 条件断点
- 3.2 观察点(watchpoint)
- 3.3 检查调用栈
- 3.4 修改程序状态
- 4、高级命令:信号、核心转储、反汇编、内存
- 4 .1 信号处理
- 4.2 核心转储(Core Dump)调试
- 4.3 反汇编与机器级调试
- 4.4 检查内存
- 4.5 远程调试
- 4.6 多线程调试
- 4.7 脚本与自动化
- 5、结合 PID 仿真程序的实战调试演练
- 6 、高级技巧:反向调试与 TUI 模式
- 7、CLion 调试与命令行 GDB 的关系
- 8、总结与最佳实践
- 9 专栏目录
系统讲解GDB 调试器,从安装启动到高阶技巧。
0 、GDB 是什么?为什么需要它?
GDB(GNU Debugger)可以让你:
- 让程序在任意位置暂停(断点)
- 一行一行单步执行代码
- 查看变量的值、内存、寄存器
- 追踪函数调用栈
- 调试崩溃转储文件(core dump)
- 甚至修改程序状态以测试修复
对于 PID 仿真,常见问题如:积分项为何发散?输出为何振荡?用printf大法不仅麻烦,还会改变时序行为,而 GDB 可在不修改代码的情况下精准定位。
1 、准备工作:编译带调试信息
GDB 需要程序包含调试符号(变量名、行号、函数名等)。在 Makefile 中我们已经使用了-g选项:
CFLAGS = -O0 -g -Wall -std=c11-O0关闭优