您在跟踪内存相关问题时使用什么策略?您使用哪些工具(开源和专有)来识别内存泄漏、内存损坏等?如果系统上只有 gdb/dbx 可用,您将如何跟踪内存泄漏?
对我来说,仅使用调试器修复内存泄漏非常困难。
答案1
答案2
valgrind 非常有帮助。
答案3
地块(来自 valgrind)是查找内存泄漏的最佳方法之一。重复您的可疑代码(或运行您的程序足够长的时间)并使用 ms_print 转储结果。通常,调用堆栈会为您提供足够的信息来修复它。
使用 GDB,您可以尝试附加到正在运行的程序并调用诸如malloc_stats()
如果您的程序是用不同的语言编写的,则可能会更加棘手。最近,一些 GDB 获得了脚本化能力,人们开始了有趣的项目,例如gdb 堆,它可以从核心转储中分析 Python 内存。类似的内存分析脚本可能适用于 C++ 对象。
另请阅读https://stackoverflow.com/questions/2564752/examining-cc-heap-memory-statistics-in-gdb
答案4
我已经使用 Objective-C 有一段时间了,并且有一个分析器可以处理 C 级内存管理之类的东西。Clang 静态分析器非常好,Apple 决定将其与 xCode IDE 捆绑在一起。我不确定这是否适合你的问题,但如果你正在做 C 那么值得一试。