GDB 调试与 Core Dump(段错误)排查指南(Linux/C/C++)
1. GDB 是什么?能解决什么问题?
GDB(GNU Debugger)是 Linux 平台最常用的程序调试器之一,主要用来:
- 断点调试:在指定代码行/函数处暂停,观察程序状态。
- 单步执行:一行一行执行,定位逻辑错误。
- 查看/修改变量:实时查看局部变量、参数、全局变量,必要时可临时修改变量值验证思路。
- 调用栈回溯:程序崩溃后查看调用链(
bt/where),快速定位问题入口。 - Core Dump 事后分析:程序崩溃生成 core 文件后,用 GDB 还原'事故现场'。
适用场景:段错误(SIGSEGV)、非法访问、野指针、栈溢出、数组越界、use-after-free 等。
2. 编译准备:一定要带调试信息
调试/分析崩溃时,可执行文件与崩溃现场必须匹配(同版本、同编译产物)。建议:
# 推荐:关闭过度优化,保留调试信息
gcc -g -O0 main.c -o app
# 或者 C++
g++ -g -O0 main.cpp -o app
-g:生成调试符号(行号、变量名、函数名)-O0/-Og:降低优化程度,避免变量被优化掉导致<value optimized out>
3. GDB 常用命令速查(高频)
3.1 启动与加载
# 方式 1:直接调试可执行文件
gdb ./app
# 方式 2:带参数启动(也可在 gdb 内 set args)
gdb --args ./app arg1 arg2
# 方式 3:调试 core 文件(事后分析)
gdb ./app /path/to/core
# 或
gdb -c /path/to/core ./app
3.2 断点/运行控制
| 命令 | 缩写 | 作用 |
|---|---|---|
break <位置> | b | 设置断点(行号/函数名/文件:行号) |
info breakpoints | i b | 查看断点列表 |
delete <编号> | d | 删除断点 |
run | r | 启动程序(命中断点会停住) |
continue | c | 继续运行到下一个断点/结束 |


