Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
谁能指导我使用合适的工具来调试 C 程序?它不是一个简单的项目,也是一个大项目的一部分。问题是我有一个结构数组并且它被正确初始化。我可以使用 gdb 检查值。程序运行后,某处的数组内容被覆盖。我不确定哪个进程正在覆盖这个结构数组的内容。gdb 中的任何工具甚至技术可以跟踪此问题?不能从 gdb 做观察点,因为它不能观察“恒定值”。尝试了 valgrind,但没有显示任何与内存相关的问题。任何帮助,非常感谢。谢谢,巴德里。
使用 GDB 总是可以查看某个地址。如果你能得到某物的地址gdb:
gdb
p &somecomplexthing
它正在回答你,0x123456你总是可以的
0x123456
watch *(void**)0x123456
(或使用适合您的任何指针对指针类型)
当心ASLR;你可能想禁用它
(也许以echo 0 > /proc/sys/kernel/randomize_va_spaceroot 身份运行)。
echo 0 > /proc/sys/kernel/randomize_va_space
此外,最近的GCC 4.8为您提供了带有;的地址清理程序。-fsanitize=address并且不要忘记-Wall -gGCC 的标志。
-fsanitize=address
-Wall -g