“this”指针在GDB回溯中发生变化

时间:2010-03-31 22:33:29

标签: c++ debugging gdb

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

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

3 个答案:

答案 0 :(得分:3)

如果在另一个对象上调用下一帧中的函数(即使对象是同一类型),this指针可以在gdb跟踪中的帧之间更改,因为这是针对特定实例的。这可能你的问题。

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

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

答案 1 :(得分:1)

代码中的优化可能会使调试器混乱。调试零售代码时,这是一个常见问题。尝试禁用优化,重新运行方案,看看是否遇到同样的问题。

答案 2 :(得分:0)

this指针是帧的本地。

另一帧是否属于'C'功能,你可以看到像0x200

的smth