以下是 GDB 10.2 的常用调试命令分类整理,涵盖基本调试、断点管理、变量查看、多线程/多进程调试等场景,方便快速查阅:
1. 启动与退出
命令
说明
gdb <可执行文件>
启动 GDB 并加载程序
gdb --args <程序> <参数>
带参数启动程序
gdb -p
附加到正在运行的进程
★ quit 或 q
退出 GDB
2. 运行程序
命令
说明
run 或 r
从头运行程序 该命令有些版本不支持
run
带命令行参数运行 该命令有些版本不支持
★ continue 或 c
继续运行到下一个断点
kill
终止正在调试的程序
Ctrl+C
中断程序执行(暂停)
3. 断点管理
命令
说明
★ break <函数名> 或 b main
在函数入口设断点
★ break <文件:行号> 或 b src.c:10
在指定文件的某行设断点
break *<地址> 或 b *0x4005a0
在内存地址处设断点
break if <条件> 或 b 10 if x==5
条件断点
info breakpoints 或 i b
查看所有断点
★ delete <编号> 或 d 2
删除指定断点
clear <位置> 或 clear main.c:10
删除某位置的断点
disable/enable <编号>
禁用/启用断点
4. 单步执行
命令
说明
★ next 或 n
执行下一行(不进入函数)
★ step 或 s
执行下一行(进入函数)
nexti 或 ni
执行下一条机器指令(不进入函数)
stepi 或 si
执行下一条机器指令(进入函数)
finish
执行到当前函数返回
until 或 u
执行到当前循环结束
5. 查看代码与堆栈
命令
说明
★ list 或 l
显示当前行附近的代码
list <函数名>
显示指定函数的代码
list <文件:行号>
显示指定位置的代码
backtrace 或 bt
查看调用栈(栈帧)
frame <编号> 或 f 1
切换到指定栈帧
info frame
查看当前栈帧详细信息
6. 查看变量与内存
命令
说明
★ print <变量> 或 p x
打印变量值
print/x <变量>
十六进制格式打印
print/d <变量>
十进制格式打印
print/t <变量>
二进制格式打印
display <变量>
每次停顿时自动打印变量
undisplay <编号>
取消自动显示
x/<格式> <地址>
查看内存(如 x/4xw &x)
格式说明
x=十六进制, d=十进制, t=二进制, w=4字节, h=2字节
7. 修改程序状态
命令
说明
set var <变量>=<值>
修改变量值(如 set var x=10)
jump <行号或地址>
跳转到指定位置继续执行
return
强制当前函数立即返回
8. 多线程/多进程调试
命令
说明
info threads
查看所有线程
thread
切换到指定线程
thread apply all <命令>
对所有线程执行命令(如 thread apply all bt)
set follow-fork-mode child/parent
设置跟踪子进程或父进程
9. 共享库调试
命令
说明
info sharedlibrary
查看已加载的共享库
set solib-search-path /path
设置共享库搜索路径
set sysroot /path
设置目标机的系统根目录
sharedlibrary <库名>
手动加载共享库符号
10. 高级命令
命令
说明
watch <变量>
设置观察点(变量被修改时暂停)
catch throw
捕获 C++ 异常
tui enable
启用文本用户界面(分屏模式)
record full
开启执行记录(支持反向调试)
reverse-step
反向执行(需先 record full)
11. 调试核心转储文件gdb <可执行文件>
bt # 查看崩溃时的调用栈
示例调试流程
编译带调试信息的程序:gcc -g -o demo demo.c
启动 GDB:gdb ./demo
设置断点并运行:(gdb) b main
(gdb) run
单步调试:(gdb) n # 下一行
(gdb) s # 进入函数
(gdb) p x # 打印变量
常见问题解决
断点无效:检查编译时是否加了 -g,或尝试 break *<地址>。符号未加载:用 set solib-search-path 指定库路径。多线程调试混乱:用 thread apply all bt 查看所有线程堆栈。
掌握这些命令后,可以高效调试大多数 C/C++ 程序问题。如需更复杂功能(如 Python 脚本扩展),可查阅 GDB 官方文档。