Answers:
如果您可以更改源代码,则Dmalloc很棒。它会列出未释放的指针,以及(对于使用调试符号构建的代码)释放指针的确切位置。
如果您做不到,那么Valgrind几乎就是这种事情的标准。我通常觉得Valgrind有点难用,但它具有更多功能,并且不涉及在代码中添加dmalloc调用
Massif(来自valgrind)是查找内存泄漏的最佳方法之一。重复您的可疑代码(或运行程序足够长的时间),然后使用ms_print转储结果。通常,调用堆栈会为您提供足够的信息来修复它。
使用GDB,您可以尝试附加到正在运行的程序并调用诸如 malloc_stats()
如果您的程序是用其他语言编写的,则可能会更棘手。最近,一些GDB获得了脚本编写能力,人们开始了一些有趣的项目,例如gdb-heap,该项目可以从核心转储中分析Python内存。类似的内存analysys脚本可能适用于C ++对象。
另请阅读/programming/2564752/examining-cc-heap-memory-statistics-in-gdb
对于Solaris,此StackOverflow问题的答案中列出了几种工具(它们包括带有其他形式的错误内存访问的泄漏检查)。
我从事Objective-C已有一段时间了,有一个分析器可以处理C级内存管理和类似的事情。Clang Static Analyzer非常好,Apple决定将其与xCode IDE捆绑在一起。我不确定这是否适合您的问题,但是如果您使用的是C语言,那么值得尝试。