有人可以指导我使用合适的工具来调试C程序吗?它不是一个简单的项目,也是一个大项目的一部分。问题是我有一个结构数组,它已正确初始化。我可以使用gdb检查值。程序运行后,某些地方的数组内容被覆盖。我不确定哪个进程覆盖了这个结构数组的内容。 gdb中的任何工具甚至技术都可以跟踪这个问题?无法从gdb执行观察点,因为它无法观看“常量值”。尝试过valgrind,但没有显示任何与内存相关的问题。任何帮助,真的很感激。谢谢,巴德里。
答案 0 :(得分:0)
使用GDB始终可以观看一些地址。如果您可以在gdb
中获取某些内容的地址:
p &somecomplexthing
它正在回复你0x123456
你总能
watch *(void**)0x123456
(或使用适合您的指针指针类型)
小心ASLR;你可能想要禁用它
(可能以echo 0 > /proc/sys/kernel/randomize_va_space
为根)。
此外,最近GCC 4.8为address sanitizer提供了-fsanitize=address
;并且不要忘记GCC的-Wall -g
标志。