调试 C/C++ 程序时,需要打印指定内存地址的内容。我最近调试程序中的序列化模块时,需要将类对象按照指定的格式转化为二进制流,为了验证转化结果,在调试时就需要将指定内存地址中的内容打印出来。

指令语法

在gdb模式下,使用 xexamine 的缩写)指令能够将指令内存地址中的信息打印出来。指令的语法如下。

x/nfu addr
x addr

其中 nfu 都是可选参数, n 表示重复次数, f 表示显示格式(format), u 表示显示单元大小(unix size)。

f 可以取如下值
x 按十六进制格式显示变量
d 按十进制格式显示变量
o 按八进制格式显示变量
t 按二进制格式显示变量

u 可以取如下值
b 表示单字节(byte)
h 表示双字节(halfword)
w 表示四字节(word)
g 表示八字节(giant word)

示例

以下指令会以16进制格式显示addr开始的100字节信息

(gdb) x/100xb addr

参考资料