与实际内存内容相比,GDB内存检查输出减少了8个字节

时间:2015-01-25 19:07:55

标签: c++ linux c++11 gdb g++4.8

我在将内存数KB转储到复杂的C ++对象时,从GDB的 x 命令获得的内存转储输出之间出现了奇怪的不一致。在GDB提示符下,我得到:

(gdb) x/32b 0x7FFFCD82B000
0x7fffcd82b000: 0xf8    0x23    0xae    0xf2    0xff    0x7f    0x00    0x00
0x7fffcd82b008: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7fffcd82b010: 0xff    0xff    0xff    0xff    0x00    0x00    0x00    0x00
0x7fffcd82b018: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00

这对应于对象成员的异常值,例如bools的值不是0或1。 但是,从/ proc / pid / mem转储此内存区域的内容时,我在前8个字节中得到0,然后是与上面相同的内存内容(左列是以十进制表示的内存偏移量) ):

 0  0
 1  0
 2  0
 3  0
 4  0
 5  0
 6  0
 7  0
 8 f8
 9 23
10 ae
11 f2
12 ff
13 7f
14  0
15  0
16  0
17  0
18  0
19  0
20  0
21  0
22  0
23  0
24 30
25 21
26 4c
27 f4
28 ff
29 7f
30  0
31  0

我在Linux 3.13(Ubuntu 14.04)上使用GDB 7.7.1。我的代码是C ++ 11,我使用系统附带的g ++ 4.8.2进行编译。

我用来转储上面显示的/proc/.../mem内容的Python脚本:

fp = open('/proc/24821/mem', 'r')
fp.seek(0x7fffed82b000)
r = fp.read(32)
for n, c in enumerate(r): print '%2d' % n, '%2x' % ord(c)

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:-1)

找到导致这种奇怪行为的原因:使用 -fsanitize = address 选项来g ++。我没有看到任何关于此的GDB错误报告,所以在这里猜测我的责任:-) 感谢任何考虑过我的问题的人!