编译时需加-g选项生成调试信息,用gdb启动后可设置断点、单步执行、查看变量和调用栈,结合core文件分析崩溃,提升调试效率。

使用 GDB 调试 C++ 程序是开发过程中排查问题的重要手段。要让 GDB 正常工作,编译时必须加入调试信息。最常用的方式是使用 -g 编译选项:
g++ -g -o myprogram myprogram.cpp这样生成的可执行文件包含了变量名、行号等调试信息,GDB 才能准确显示代码位置和变量内容。
启动与基本操作
用 GDB 启动程序:
gdb ./myprogram进入 GDB 后,常用命令包括:
立即学习“C++免费学习笔记(深入)”;
- run (或 r):运行程序,可带命令行参数,如 run arg1 arg2
- quit (或 q):退出 GDB
- help:查看帮助,例如 help break
设置断点与单步执行
断点是调试的核心功能,可以在关键位置暂停程序运行。
- break main:在 main 函数入口设断点
- break 15:在当前文件第 15 行设断点
- break myfile.cpp:20:在指定文件第 20 行设断点
- break func_name:在函数名处设断点
- info breakpoints:查看所有断点
- delete 1:删除编号为 1 的断点
程序暂停后,可以逐步执行:
- next (n):逐行执行,不进入函数内部
- step (s):逐语句执行,会进入函数
- finish:运行到当前函数结束
- continue (c):继续运行直到下一个断点
查看变量与调用栈
调试时经常需要检查变量值和函数调用关系。
- print variable_name (或 p):打印变量值,支持表达式如 p a + b
- display x:每次暂停时自动显示变量 x 的值
- undisplay num:取消某条 display 显示(num 来自 info display)
- backtrace (或 bt):显示当前调用栈,查看函数调用链
- frame n:切换到第 n 层栈帧,方便查看局部变量
- up / down:在调用栈中上下移动
对于 C++ 对象,print 可以显示成员变量,比如 p obj 或 p obj.member。
处理崩溃与核心转储
如果程序崩溃并生成了 core 文件,可以用 GDB 加载分析:
gdb ./myprogram core然后输入 bt 查看崩溃时的调用栈,快速定位出错位置。
确保系统允许生成 core 文件,可通过命令 ulimit -c unlimited 开启。
实用技巧
- 使用 list (l) 显示源代码,默认显示当前行附近 10 行
- layout src:进入 TUI 模式,分屏显示源码(终端支持时)
- set args arg1 arg2:预先设置运行参数,避免每次 run 都输入
- catch throw:捕获 C++ 异常抛出,便于调试异常流程
- 在 GDB 中修改变量值:set variable x = 10,可用于测试不同分支
基本上就这些。GDB 功能强大,熟练掌握几个关键命令就能显著提升调试效率。关键是编译加 -g,合理设断点,善用 print 和 backtrace,遇到崩溃用 core 分析。不复杂但容易忽略细节。










