Linux 下 C/C++ 调试工具 GDB 实战指南
在 Linux 环境下开发 C/C++ 程序时,GDB(GNU Debugger)是不可或缺的工具。配合 CGDB 这样的终端界面增强版,调试效率会更高。下面结合实战场景,梳理从编译配置到常用命令的核心用法。
一、编译配置:开启调试信息
程序发布通常分为 debug 和 release 两种模式。debug 模式保留调试符号,release 则剥离以减小体积。默认情况下,gcc/g++ 生成的可执行文件属于 release 版本,直接运行 gdb 往往无法定位源码。
因此,编译时必须显式添加 -g 选项:
gcc -o $@ $^ -g
加上这个参数后,生成的二进制文件才包含足够的调试信息供 gdb 分析。
二、启动与基础操作
确保已安装 gdb 或 cgdb,且待调试程序带有 -g 编译标志。启动命令如下:
gdb 文件名
进入 gdb 后,默认看不到源代码,需要使用 l (list) 命令查看:
l:显示当前上下文 10 行代码。l 函数名/文件名:列出指定函数或文件的源码。l 文件名:行号:从指定行开始显示。

实际开发中,纯命令行交互略显繁琐,CGDB 提供了类似 IDE 的文本界面,能直接在屏幕左侧显示代码,右侧显示变量和断点状态,其他命令逻辑与 gdb 完全一致。

核心调试指令
掌握以下指令足以应对大部分日常调试需求:
- r (run):启动程序。中途可随时输入 r 重新从头运行。
- b [文件名:] 行号:设置断点。例如
b main.c:10。 - info b:查看所有断点及其序号。
- d:删除所有断点。
- d 断点序号:删除特定断点。注意这里用的是 info b 显示的序号,而非行号。
- c (continue):继续执行,直到下一个断点或程序结束。
- n (next):单步跳过,遇到函数调用不进入内部。
- s (step):单步进入,遇到函数会跳入函数内部。
- f (finish):执行完当前函数并返回。
- until 行号:执行到指定行号,常用于跳出循环。
提示:在 gdb 中直接回车会自动重复上一条命令,这能显著提升操作速度。
三、变量监控与修改
调试过程中,观察变量状态至关重要:







