以下是 GDB(GNU Debugger)常用命令的表格总结,按功能分类便于查阅:
| 类别 | 命令 | 简写 | 说明 |
|---|---|---|---|
| 启动与退出 | gdb [可执行文件] | — | 启动 GDB 并加载可执行文件 |
quit | q | 退出 GDB | |
| 运行控制 | run [args] | r | 开始运行程序(可带参数) |
start | — | 启动程序并停在 main 函数开头 | |
continue | c | 继续运行直到下一个断点或结束 | |
kill | — | 终止正在调试的程序 | |
| 断点管理 | break [位置] | b | 在指定位置设断点(函数名、行号、地址等) 例: b main, b file.c:10 |
break [位置] if [条件] | — | 设置条件断点 | |
info breakpoints | i b | 查看所有断点 | |
delete [编号] | d | 删除指定编号的断点(不带编号则删除所有) | |
disable [编号] | — | 禁用断点 | |
enable [编号] | — | 启用断点 | |
| 单步执行 | step | s | 单步进入(会进入函数内部) |
next | n | 单步跳过(不进入函数) | |
finish | — | 执行完当前函数并返回 | |
until [位置] | u | 运行到指定行(常用于跳出循环) | |
| 查看信息 | list [位置] | l | 显示源代码(默认当前行附近) |
print [表达式] | p | 打印变量或表达式的值 | |
display [表达式] | — | 每次停住时自动显示表达式的值 | |
info locals | — | 显示当前作用域的局部变量 | |
info args | — | 显示当前函数的参数 | |
info registers | i r | 显示寄存器内容(需支持) | |
| 栈帧操作 | backtrace | bt | 显示调用栈(函数调用链) |
frame [编号] | f | 切换到指定栈帧 | |
up / down | — | 向上调用栈 / 向下调用栈移动一帧 | |
| 内存与寄存器 | x/[数量][格式][单位] 地址 | x | 查看内存内容 例: x/10wx 0x1234(10 个十六进制字) |
set variable var = value | — | 修改变量的值 | |
| 其他实用命令 | help [命令] | h | 获取帮助 |
shell [命令] | — | 在 GDB 中执行 shell 命令 | |
set args [参数] | — | 设置程序运行参数(等效于 run 时传参) | |
show args | — | 显示当前设置的程序参数 |
💡 提示:
- 大多数命令支持 Tab 自动补全。
- 可使用
command [编号]为断点添加自动执行命令。- 使用
layout src(TUI 模式)可分屏显示源码和命令。
gdb -batch -ex "thread apply all bt" -p $PID
解决 GDB 附加进程时的 ptrace 不允许
bash
# 编辑 sysctl 配置文件
sudo vim /etc/sysctl.d/10-ptrace.conf
# 添加以下内容
kernel.yama.ptrace_scope = 0
# 应用配置
sudo sysctl -p /etc/sysctl.d/10-ptrace.conf