上一篇
Linux下GDB调试器怎么用?
- Linux
- 2025-06-30
- 4
在终端输入gdb启动调试器,加载可执行文件后,使用run执行程序,break设置断点,step单步调试,print查看变量值,quit退出调试。
Linux下GDB调试器使用指南
GDB(GNU Debugger)是Linux系统中最强大的命令行调试工具,用于分析程序崩溃、逻辑错误和内存问题,掌握GDB能显著提升开发效率,以下为详细操作指南:
安装与基础配置
# Ubuntu/Debian sudo apt install gdb # CentOS/RHEL sudo yum install gdb # 编译时添加调试信息(关键步骤) gcc -g main.c -o demo # -g参数生成调试符号
核心调试流程
-
启动调试
gdb ./demo # 启动程序 gdb -p <进程ID> # 附加到运行中的进程 -
断点管理
(gdb) break main.c:20 # 在文件第20行设断点 (gdb) break func_name # 在函数入口设断点 (gdb) info breakpoints # 查看所有断点 (gdb) delete 2 # 删除2号断点 -
程序控制
(gdb) run # 启动程序 (gdb) continue # 继续运行到下一个断点 (gdb) next # 单步跳过(不进入函数) (gdb) step # 单步进入(跳入函数) (gdb) finish # 执行到当前函数返回
-
查看数据
(gdb) print variable # 打印变量值 (gdb) print *(ptr+3)@5 # 打印指针偏移后的5个元素 (gdb) display var # 每次暂停自动显示变量 (gdb) info registers # 查看寄存器值 -
堆栈分析
(gdb) backtrace # 查看调用栈 (gdb) frame 2 # 切换到栈帧2 (gdb) info locals # 显示当前栈帧局部变量
高级调试技巧
-
多线程调试

-
核心转储分析
ulimit -c unlimited # 启用核心转储 ./demo # 触发崩溃生成core文件 gdb ./demo core # 分析崩溃现场 -
内存检查
(gdb) x/8wx 0x400000 # 检查内存地址(8个4字节字) (gdb) watch variable # 变量写入时中断 -
自动化调试
(gdb) set logging on # 开启日志记录 (gdb) source script.gdb # 执行预编写脚本 - 启动GDB:gdb ./crash_program
- 运行程序:(gdb) run
- 崩溃后查看堆栈:(gdb) backtrace
- 定位问题函数:(gdb) frame <编号>
- 检查指针变量:(gdb) print *ptr
-
代码编译
- 始终使用-g编译选项
- 避免-O3等高优化级别(使用-Og替代)
-
GDB配置
# ~/.gdbinit 配置文件示例 set pagination off set print pretty on define hook-run break main end
-
替代工具
- GUI前端:DDD(Data Display Debugger)、VS Code GDB插件
- 内存检测:Valgrind(检测内存泄漏)
- 官方文档:GDB User Manual
- 速查表:GDB Cheat Sheet
- 实战书籍:《The Art of Debugging with GDB, DDD, and Eclipse》
学习资源
引用说明基于GDB 12.1官方手册及Linux开发者社区最佳实践整理,适用于主流的Linux发行版(Ubuntu 20.04+/CentOS 7+),命令示例均在GNU/Linux环境下验证通过,技术细节参考了Red Hat开发者文档及Stack Overflow权威解决方案。
通过系统化练习(建议从简单程序开始调试),您将在2-3周内显著提升调试能力,遇到复杂问题时,结合strace系统调用跟踪工具可增强分析深度。
实用场景示例
场景:分析段错误(segfault)

调试优化建议