Linux gdb'检查'行为

时间:2014-06-27 15:41:19

标签: c++ c linux gdb

我正在使用gdb来探索Linux上的核心文件,我在检查内存地址时发现了奇怪的行为:

(gdb) x/f 0xbd091a10
0xbd091a10:     0
(gdb) x/g 0xbd091a10
0xbd091a10:     65574
(gdb) x/f 0xbd091a10
0xbd091a10:     65574

这些语句是直接背靠背运行的,我不明白为什么检查float会返回不一致的结果。值65574确实有意义,因为它对应于进程最后加载的项的标识。

有谁知道这个的原因?

版本详情:

Linux mx534vm 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-32.el5)

1 个答案:

答案 0 :(得分:3)

这没有不一致之处。 'f'和'g'是不同类别的说明符,'f'表示格式,'g'表示单位大小。使用时,每个说明符都成为其自己的类别的默认值,该类别适用于'x'的所有后续使用。因此,您的最后两个命令都等同于x/fg 0xbd091a10