gpt4 book ai didi

c++ - 在 gdb 中是什么意思?

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:49 25 4
gpt4 key购买 nike

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

Program received signal SIGSEGV, Segmentation fault.

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

(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。这只是调试器试图提供帮助——每当它解码任何指针值时,它都会尝试查看指针是否恰好位于目标代码中任何已知符号附近,如果是这样,它会打印出该信息。

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

您几乎肯定有某种内存损坏错误,它恰好会产生该值作为副作用。

关于c++ - <exp+6> 在 gdb 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26480100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com