调试堆栈值损坏的好方法是什么。在我的程序中,有时在返回一个关闭文件描述符的方法后,this指针的地址会发生变化。我调试了几个小时的程序,但我找不到问题。
找出更改this指针地址的好方法是什么?当我在此指针上手动添加监视时,不会发生错误。当我尽可能地删除我的代码时,仍然会发生错误。我尝试了Valgrind,但它没有发现任何早期的堆栈损坏。
我设法检测错误发生的时间,我在64位模式下编译代码。其地址从0xxxxxxx更改为0x1000000xxxxxxx。我在发生错误的方法中检查了这个地址,我在地址发生变化时发现了这个地址(参见第一个paragraaf)。
有没有其他方法可以找出导致此问题的原因?
答案 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上使用。