检测内存(结构数组)被覆盖的工具

时间:2013-08-07 09:55:49

标签: c debugging memory

有人可以指导我使用合适的工具来调试C程序吗?它不是一个简单的项目,也是一个大项目的一部分。问题是我有一个结构数组,它已正确初始化。我可以使用gdb检查值。程序运行后,某些地方的数组内容被覆盖。我不确定哪个进程覆盖了这个结构数组的内容。 gdb中的任何工具甚至技术都可以跟踪这个问题?无法从gdb执行观察点,因为它无法观看“常量值”。尝试过valgrind,但没有显示任何与内存相关的问题。任何帮助,真的很感激。谢谢,巴德里。

1 个答案:

答案 0 :(得分:0)

使用GDB始终可以观看一些地址。如果您可以在gdb中获取某些内容的地址:

   p &somecomplexthing

它正在回复你0x123456你总能

  watch *(void**)0x123456

(或使用适合您的指针指针类型)

小心ASLR;你可能想要禁用它

(可能以echo 0 > /proc/sys/kernel/randomize_va_space为根)。

此外,最近GCC 4.8address sanitizer提供了-fsanitize=address;并且不要忘记GCC的-Wall -g标志。