<exp+6> 在 gdb 中是什么意思?

What does <exp+6> mean in gdb?

本文关键字:是什么 意思 lt exp+6 gt gdb      更新时间:2023-10-16

我正在使用gdb调试C++代码。程序由于分段故障而停止。

Program received signal SIGSEGV, Segmentation fault.

所以我试图打印出变量的值,以确定错误的来源。我有一个名为"ring"的数组,类型为"Link**",其中Link是我定义的类。数组中的每个元素都指向一个"Link*"变量。这是打印"环形"数组的前三个元素时的输出。

(gdb) print ring[0]
$13 = (Link *) 0x8125290
(gdb) print ring[1]
$14 = (Link *) 0xb7e80b86 <exp+6>
(gdb) print ring[2]
$15 = (Link *) 0x8132e20

打印"ring[1]"时,为什么在内存地址后面出现"?这是什么意思?

编辑:我在Arch Linux(3.16.4-1-Arch)上使用gdb 7.8

表示指针值等于exp符号的地址加6。这只是调试器试图提供帮助——每当它解码任何指针值时,它都会试图查看指针是否恰好位于目标代码中的任何已知符号附近,如果是,它会打印出这些信息

在检查函数代码的反汇编时,例如在分支目标中,您可能会看到这样的注释,但作为数据指针,这是非常不寻常的(函数指针往往直接指向函数符号,而不是偏移到它们中)。

几乎可以肯定的是,您有某种内存损坏错误,它只是碰巧产生该值作为副作用。