本文记录了 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 的信息 |
参考文章