以下是 GDB 10.2 的常用调试命令分类整理,涵盖基本调试、断点管理、变量查看、多线程/多进程调试等场景,方便快速查阅:


1. 启动与退出

命令 说明
gdb <可执行文件> 启动 GDB 并加载程序
gdb --args <程序> <参数> 带参数启动程序
gdb -p <PID> 附加到正在运行的进程
quitq 退出 GDB

2. 运行程序

命令 说明
runr 从头运行程序 该命令有些版本不支持
run <arg1> <arg2> 带命令行参数运行 该命令有些版本不支持
continuec 继续运行到下一个断点
kill 终止正在调试的程序
Ctrl+C 中断程序执行(暂停)

3. 断点管理

命令 说明
break <函数名>b main 在函数入口设断点
break <文件:行号>b src.c:10 在指定文件的某行设断点
break *<地址>b *0x4005a0 在内存地址处设断点
break if <条件>b 10 if x==5 条件断点
info breakpointsi b 查看所有断点
delete <编号>d 2 删除指定断点
clear <位置>clear main.c:10 删除某位置的断点
disable/enable <编号> 禁用/启用断点

4. 单步执行

命令 说明
nextn 执行下一行(不进入函数)
steps 执行下一行(进入函数)
nextini 执行下一条机器指令(不进入函数)
stepisi 执行下一条机器指令(进入函数)
finish 执行到当前函数返回
untilu 执行到当前循环结束

5. 查看代码与堆栈

命令 说明
listl 显示当前行附近的代码
list <函数名> 显示指定函数的代码
list <文件:行号> 显示指定位置的代码
backtracebt 查看调用栈(栈帧)
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 <ID> 切换到指定线程
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 <可执行文件> <core文件>  # 加载 core dump
bt                          # 查看崩溃时的调用栈

示例调试流程

  1. 编译带调试信息的程序
    gcc -g -o demo demo.c
  2. 启动 GDB
    gdb ./demo
  3. 设置断点并运行
    (gdb) b main
    (gdb) run
  4. 单步调试
    (gdb) n      # 下一行
    (gdb) s      # 进入函数
    (gdb) p x    # 打印变量

常见问题解决

  • 断点无效:检查编译时是否加了 -g,或尝试 break *<地址>
  • 符号未加载:用 set solib-search-path 指定库路径。
  • 多线程调试混乱:用 thread apply all bt 查看所有线程堆栈。

掌握这些命令后,可以高效调试大多数 C/C++ 程序问题。如需更复杂功能(如 Python 脚本扩展),可查阅 GDB 官方文档