gdb
跳转到导航
跳转到搜索
查看数据
查看指定内存地址
可以使用examine命令(简写是x)来查看内存地址中的值。x 命令的语法如下所示:
x/<n/f/u> <addr>
n、f、u 是可选的参数。(详见 help x)
- n 正整数,显示内容的项数。
- f 显示的格式。字符串 s;指令 i;十六进制数 x。
- u 表示从当前地址往后请求的字节数,如果不指定的话,gdb 默认是4字节。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双字节,w 表示四字节,g 表示八字节。当我们指定了字节长度后,gdb 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
<addr>表示一个内存地址。
n/f/u 三个参数可以一起使用。例如:
命令:x/3xh 0x54320表示,从内存地址 0x54320 读取内容,h 表示以双字节为一个单位,3 表示三个单位,x 表示按十六进制显示。
指定文件或者函数名
使用 file::var 和 funcname::var 的形式来指定要查看的变量所在的文件或者函数。文件名如有歧义,可以使用单引号引起来。[1]
收到SIGILL信号时的指令
disassemble $rip,+1
设置
源码路径
路径替换:
set substitute-path from to
历史记录
默认不保存历史记录,使用如下命令来保存之:
set history expansion on set history save on set history size 2000 set history filename ~/.gdb_history
格式化设置
打印完整的字符串:
set print elements 0 set print repeats 0
技巧
文件和环境变量
启动时读取的文件是~/.gdbinit。
调试 CPython
使用 python 命令来加载 CPython 的 Tools/gdb/libpython.py 脚本,然后就有 py-bt 等命令可以用了。[3]
远程调试
被调试方:
$ gdbserver :12345 myprog [args...]
调试方连接:
$ gdb myprog
(gdb) target remote localhost:12345
参见
外部链接
- GDB中应该知道的几个调试方法 - 酷壳 CoolShell.cn
- Debug Hacks
- cyrus-and/gdb-dashboard: Modular visual interface for GDB in Python
- Dump VDSO via GDB – Hev's Blog
- Debugging with GDB: Separate Debug Files