1

谁能指导我使用合适的工具来调试 C 程序?它不是一个简单的项目,也是一个大项目的一部分。问题是我有一个结构数组并且它被正确初始化。我可以使用 gdb 检查值。程序运行后,某处的数组内容被覆盖。我不确定哪个进程正在覆盖这个结构数组的内容。gdb 中的任何工具甚至技术可以跟踪此问题?不能从 gdb 做观察点,因为它不能观察“恒定值”。尝试了 valgrind,但没有显示任何与内存相关的问题。任何帮助,非常感谢。谢谢,巴德里。

4

1 回答 1

0

使用 GDB 总是可以查看某个地址。如果你能得到某物的地址gdb

   p &somecomplexthing

它正在回答你,0x123456你总是可以的

  watch *(void**)0x123456

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

当心ASLR;你可能想禁用它

(也许以echo 0 > /proc/sys/kernel/randomize_va_spaceroot 身份运行)。

此外,最近的GCC 4.8为您提供了带有;的地址清理程序。-fsanitize=address并且不要忘记-Wall -gGCC 的标志。

于 2013-10-24T13:52:53.387 回答