如果没有追踪工具,有哪些技术可以用来检测/调试内存泄漏?
如果没有追踪工具,有哪些技术可以用来检测/调试内存泄漏?
一种可能的方法是编译代码并在可以利用内置工具的系统上执行它(例如在Solaris上使用libumem,或在Linux上使用libc capability)。
类似的问题在SO上:
除了其他人提到的手动检查技术外,您还应考虑使用代码分析工具,例如valgrind
。
以下是他们网站上的介绍:
Valgrind是一个屡获殊荣的仪器化框架,用于构建动态分析工具。有一些Valgrind工具可以自动检测许多内存管理和线程错误,并详细记录您的程序的性能。您还可以使用Valgrind构建新工具。
Valgrind发行版目前包括六个生产质量工具:一个内存错误检测器、两个线程错误检测器、一个缓存和分支预测分析器、一个调用图生成缓存分析器和一个堆分析器。它还包括两个实验性工具:一个堆/栈/全局数组溢出检测器和一个SimPoint基本块向量生成器。它可以运行在以下平台上:X86/Linux、AMD64/Linux、PPC32/Linux、PPC64/Linux和X86/Darwin(Mac OS X)。
我使用了Memtrace http://www.fpx.de/fp/Software/MemTrace/ http://sourceforge.net/projects/memtrace/
如果有任何泄漏,您可能需要调用统计函数进行打印。最好的方法是在模块或代码片段执行之前和之后调用此统计函数。 * 警告 * Memtrace足够友好,允许内存覆盖/双重释放。它会检测这些异常并优雅地避免任何崩溃。