如何使用 Malloc Debug 来检查本机内存泄漏?
Posted
技术标签:
【中文标题】如何使用 Malloc Debug 来检查本机内存泄漏?【英文标题】:How to use Malloc Debug for checking native memory leaks? 【发布时间】:2019-01-26 18:47:15 【问题描述】:我正在探索几个选项来找出最好的工具/方法来找出 android 应用程序中本机代码中的内存泄漏。作为本练习的一部分,我遇到了以下 url 中的选项。
https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README_marshmallow_and_earlier.md
我编写了一个示例应用程序,它调用在共享库中编写的本机函数。我故意将内存泄漏放在这个本机函数中。在运行应用程序之前,我做了
-
adb shell setprop libc.debug.malloc.program
adb shell setprop libc.debug.malloc 10
然后我启动了应用程序。但是我在 logcat 中看不到任何表明内存泄漏的打印。
如果有人曾经使用这种方法来找出本机内存泄漏,请告诉我是否遗漏了一些东西。 logcat 日志是否是查找泄漏消息的正确位置?如果没有,我应该如何找到泄漏信息?
【问题讨论】:
哪种语言,C 或 C++?它们是不同的语言。您应该在 C++ 中使用new
而不是 malloc
,因为 malloc
不会调用对象的构造方法。
您可能需要考虑不在嵌入式系统中使用动态内存分配。内存分配可能会导致无法恢复的碎片或内存泄漏。在互联网上搜索“C++ 内存池”和“C++ 新位置”。
@ThomasMatthews android,虽然从技术上来说是一个嵌入式系统,但在内存方面肯定没有限制,内存分配也很好。它也不应该导致内存泄漏,除非使用不当。
【参考方案1】:
您应该根据应用程序的版本设置回溯。
试试这个命令:
adb shell setprop libc.debug.malloc.options backtrace
然后取dumpheap。
【讨论】:
android.googlesource.com/platform/bionic/+/master/libc/… 请试试这个以上是关于如何使用 Malloc Debug 来检查本机内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Dtrace 在 Solaris 10 上检查 malloc?