GDB(GNU Debugger)提供了丰富的调试命令,涵盖代码运行、断点管理、变量查看、堆栈分析等多个方面。以下是 GDB 的所有主要调试命令,按类别分类:
1. 启动和退出
| 命令 |
说明 |
gdb program |
调试可执行文件 program |
gdb --args program arg1 arg2 |
传递参数给 program |
gdb -p PID |
附加到进程 PID |
q / quit |
退出 GDB |
2. 运行程序
| 命令 |
说明 |
r / run [args] |
运行程序,可传递参数 |
start |
启动程序并停在 main() 之前 |
kill |
终止正在调试的程序 |
3. 断点(Breakpoints)
| 命令 |
说明 |
b / break func_name |
在函数 func_name 处设置断点 |
b line_number |
在当前源文件的 line_number 处设置断点 |
b file:line |
在指定文件 file 的 line 行处设置断点 |
b *address |
在内存地址 address 处设置断点 |
info breakpoints |
显示所有断点 |
delete [num] |
删除编号为 num 的断点(默认删除所有断点) |
clear func_name |
清除函数 func_name 的断点 |
clear file:line |
清除 file 文件 line 行的断点 |
enable [num] |
启用编号为 num 的断点 |
disable [num] |
禁用编号为 num 的断点 |
condition num expr |
仅当 expr 为真时,触发编号为 num 的断点 |
4. 观察点(Watchpoints)
| 命令 |
说明 |
watch var |
监视变量 var 变化时暂停 |
rwatch var |
变量 var 被读取时暂停 |
awatch var |
变量 var 被读/写时暂停 |
info watchpoints |
显示所有监视点 |
delete watch num |
删除编号为 num 的监视点 |
5. 单步执行(Stepping)
| 命令 |
说明 |
s / step |
单步执行代码(进入函数内部) |
n / next |
单步执行代码(不进入函数内部) |
finish |
运行到当前函数返回 |
until |
运行到当前代码块结束 |
6. 继续执行
| 命令 |
说明 |
c / continue |
继续执行到下一个断点 |
jump line |
跳转到 line 行执行 |
7. 堆栈(Stack)
| 命令 |
说明 |
bt / backtrace |
显示当前调用栈 |
bt full |
显示完整的调用栈(包含参数和变量) |
frame num |
切换到编号 num 的栈帧 |
up |
向上移动一层栈帧 |
down |
向下移动一层栈帧 |
8. 打印变量
| 命令 |
说明 |
p / print expr |
打印表达式 expr 的值 |
ptype var |
显示变量 var 的类型 |
whatis var |
显示变量 var 的类型 |
x addr |
以十六进制格式查看 addr 处的内存 |
x/4x addr |
以十六进制显示 addr 处的 4 个单位数据 |
9. 寄存器
| 命令 |
说明 |
info registers |
显示所有寄存器的值 |
p $eax |
打印寄存器 eax 的值 |
10. 信号(Signals)
| 命令 |
说明 |
handle SIGSEGV stop |
在 SIGSEGV 信号触发时暂停 |
handle SIGINT nostop |
忽略 SIGINT 信号 |
11. 调试共享库
| 命令 |
说明 |
info sharedlibrary |
显示加载的共享库 |
set solib-search-path path |
设置共享库搜索路径 |
12. 修改变量
| 命令 |
说明 |
set var = value |
修改变量值 |
set $eax = 0x1234 |
修改寄存器值 |
13. 附加进程
| 命令 |
说明 |
attach PID |
附加到进程 PID |
detach |
断开调试进程 |
14. 线程调试
| 命令 |
说明 |
info threads |
显示所有线程 |
thread num |
切换到 num 号线程 |
thread apply all cmd |
对所有线程执行 cmd |
15. 脚本
| 命令 |
说明 |
source file |
运行 file 中的 GDB 命令 |
define cmd |
自定义命令 |
document cmd |
添加自定义命令的文档 |
save breakpoints file |
将断点信息保存到 file |
16. GDB 调试 TUI 模式
| 命令 |
说明 |
layout src |
显示源码窗口 |
layout asm |
显示汇编窗口 |
layout regs |
显示寄存器窗口 |
tui enable |
启用 TUI 模式 |
tui disable |
禁用 TUI 模式 |