使用 GDB

本文记录了 GDB 常用的命令作为备忘清单。其中大部分命令来自《深入理解计算机系统》一书,其他补充的少部分是在完成 Lab 的过程中使用到的。

GNU 的调试器 GDB 提供了许多有用的特性,支持机器级程序的运行时评估和分析。有了 GDB,可以观察正在运行的程序,同时又对程序的执行有相当的控制,这使得研究程序的行为变为可能。

常用命令

开始和停止

命令 效果
quit 退出 GDB
run 运行程序(在此给出命令行参数)
kill 停止程序

断点

命令 效果
break multstore 在函数 multstore 入口处设置断点
break * 0x400540 在地址 0x400540 处设置断点
info breakpoints 所有断点信息
delete 1 删除断点 1
delete 删除所有断点

执行

命令 效果
stepi 执行 1 条指令
stepi 4 执行 4 条指令
nexti 类似于 stepi,但以函数调用为单位
continue 继续执行
finish 运行到当前函数返回

检查代码

命令 效果
disas 反汇编当前函数
disas multstore 反汇编函数 multstore
disas 0x400544 反汇编位于地址 0x400544 附近的函数
disas 0x400540, 0x40054d 反汇编指定地址范围内的代码
print /x $rip 以十六进制输出程序计数器的值

检查数据

命令 效果
print $rax 以十进制输出 %rax 的内容
print /x $rax 以十六进制输出 %rax 的内容
print /t $rax 以二进制输出 %rax 的内容
print 0x100 输出 0x100 的十进制表示
print /x 555 输出 555 的十六进制表示
print /x ($rsp+8) 以十六进制输出 %rsp 的内容加上 8
print *(long *) 0x7fffffffe818 输出位于地址 0x7fffffffe818 的长整数
print *(long *) ($rsp+8) 输出位于地址 %rsp+8 处的长整数
x/2g 0x7fffffffe818 检查从地址 0x7fffffffe818 开始的双(8 字节)字
x/20b 0x7fffffffe818 检查从地址 0x7fffffffe818 开始的 20 个字节
x/20b multstore 检查函数 multstore 的前 20 个字节

有用的信息

命令 效果
info frame 有关当前栈帧的信息
info registers 所有寄存器的值
help 获取有关 GDB 的信息

参考文章

  • 《深入理解计算机系统》