c++ - "this"GDB 回溯中的指针变化

标签 c++ debugging gdb

我正在检查核心转储,并注意到在一个帧中的“this”指针与下一帧(在同一线程中)不同。不仅仅是一点点不同,它从 0x8167428 变成了 0x200。

我不太精通 GDB,但这对我来说似乎不对。这是有问题的吗?如果是,原因可能是什么?

最佳答案

如果在不同的对象上调用下一帧中的函数(即使对象是同一类型),则 this 指针可以在 gdb 跟踪中的帧之间改变,因为这是为了具体实例。这可能不是您的问题。

0x200 不是 this 的有效值,几乎可以肯定表示某种类型的内存损坏。 this 指针有时存储在堆栈中并作为不可见的第一个参数传递给函数。因此,如果您损坏了堆栈(通过越界写入另一个变量),您可能会看到 this 指针已损坏。

0x200 本身很有趣。因为它非常接近 0,但实际上不是 0,所以它表明您正在查看的实例可能是位于 的另一个对象或数组的一部分从该对象/数组开始的 0x200 字节,并且该对象/数组的地址实际上是 NULL。查看您的代码,您应该能够很容易地找出哪个对象已设置为 NULL,这导致报告 0x200

关于c++ - "this"GDB 回溯中的指针变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556945/

相关文章:

c++ - 为什么 const std::random_device 不可能?

c++ - 在函数参数中分配/初始化引用

debugging - WinDbg 不显示寄存器值

debugging - 在 64 位环境中使用 gdb 调试 32 位应用程序

C 段错误 11

gcc - 如何对 Linux 内核进行反优化以避免值(value)被优化掉

c++ - 计算文本文件中整数个数的函数?

c++ - QString::toStdString() 在 std::string 析构函数上崩溃

powershell - 跟踪/调试 PowerShell 运算符

visual-studio - 如何调试连接到服务器应用程序的多个客户端?