调试堆栈值损坏的好方法

时间:2014-01-28 07:01:34

标签: c++ linux debugging gcc stack-corruption

调试堆栈值损坏的好方法是什么。在我的程序中,有时在返回一个关闭文件描述符的方法后,this指针的地址会发生变化。我调试了几个小时的程序,但我找不到问题。

找出更改this指针地址的好方法是什么?当我在此指针上手动添加监视时,不会发生错误。当我尽可能地删除我的代码时,仍然会发生错误。我尝试了Valgrind,但它没有发现任何早期的堆栈损坏。

我设法检测错误发生的时间,我在64位模式下编译代码。其地址从0xxxxxxx更改为0x1000000xxxxxxx。我在发生错误的方法中检查了这个地址,我在地址发生变化时发现了这个地址(参见第一个paragraaf)。

有没有其他方法可以找出导致此问题的原因?

1 个答案:

答案 0 :(得分:3)

你可能想要试一试address-sanitizer。它是available in gcc 4.8

  

添加了一个快速内存错误检测器AddressSanitizer   可以通过-fsanitize=address启用。内存访问指令会   被检测以检测堆栈,堆栈和全局缓冲区溢出   以及免费使用后的错误。要获得更好的堆栈跟踪,请使用   -fno-omit-frame-pointer。 AddressSanitizer可在IA-32 / x86-64 / x32 / PowerPC / PowerPC64 GNU / Linux和x86-64 Darwin上使用。