在没有valgrind的情况下在嵌入式系统上寻找内存泄漏(或者使用类似valgrind的最小应用程序)

时间:2016-01-08 16:14:32

标签: c memory-leaks valgrind

我正在使用嵌入式Linux开发,我们目前在一些内存页面分配错误方面遇到了一些麻烦,这让我相信我们在某处发生了泄漏。

目前,我正在尝试交叉编译valgrind以在我们的系统上使用,但是我对这个解决方案失去了信心,因为valgrind会消耗大量的内存(我们有严重的内存限制)。

这让我想知道:有没有办法在没有valgrind的情况下寻找内存泄漏,或者使用类似valgrind的应用程序来减少内存使用量?为malloc()和free()创建包装器是不可能的。

此外,导致分配失败的测试是一个简单的压力测试,复制文件n次并检查其md5sum,以防任何人感到好奇。

我正在使用Linaro工具链进行交叉编译,glibc 2.15,并且系统设置时没有交换分区。该系统有大约64MB的RAM,使valgrind或任何其他内存密集型应用程序有点难以使用。

此致 Guilherme的

1 个答案:

答案 0 :(得分:4)

由于您使用的是glibc,因此您应该可以使用其内置的内存跟踪支持。您的程序将通过在启动时或附近调用mtrace(3)来启用此功能。 mtrace()通过环境变量MALLOC_TRACE在运行时控制下将钩子函数安装到内存分配器中以记录分配和释放。

您可能还想了解mtrace(1),这是一个用于解释mtrace工具生成的日志文件的Perl脚本。

此工具仅跟踪分配和解除分配,这比Valgrind要少得多。然而,当您寻找内存泄漏时,这些是您感兴趣的主要项目。