调试C / C ++代码时,我使用以下命令检查内存
(gdb)x/32xub data
0x7fef824b2c6a: 8 0 39 235 101 169 0 30
0x7fef824b2c72: 73 219 25 195 8 0 69 0
0x7fef824b2c7a: 0 60 17 223 64 0 54 6
0x7fef824b2c82: 245 43 85 190 0 3 147 32
我希望连续16个字节,每个字节显示2个十六进制数字。 不知道该怎么办。没有看到reference manual的任何帮助。 有任何想法吗?感谢。
UPDATE1
刚刚意识到再次执行时,它会以十六进制显示每个字节。但是,它每行8个字节,而不是16个。
(gdb) x/32x prevPkt
0x7fef824b2c6a: 0x08 0x00 0x27 0xeb 0x65 0xa9 0x00 0x1e
0x7fef824b2c72: 0x49 0xdb 0x19 0xc3 0x08 0x00 0x45 0x00
0x7fef824b2c7a: 0x00 0x3c 0x11 0xdf 0x40 0x00 0x36 0x06
0x7fef824b2c82: 0xf5 0x2b 0x55 0xbe 0x00 0x03 0x93 0x20
答案 0 :(得分:3)
您可以使用宏执行此操作。 (这是根据我对a similar question)的回答改编的。
define xb16
dont-repeat
set $addr = (char *)($arg0)
set $endaddr = $addr + $arg1
while $addr < $endaddr
printf "%p: ", $addr
set $lineendaddr = $addr + 16
if $lineendaddr > $endaddr
set $lineendaddr = $endaddr
end
set $a = $addr
while $a < $lineendaddr
printf "0x%02x ", *(unsigned char *)$a
set $a++
end
printf "\n"
set $addr = $addr + 16
end
end
document xb16
usage: xb16 address count
outputs bytes in hex, 16 per row
end