如何检测Android JNI代码中的内存泄漏?我正在使用Froyo
答案 0 :(得分:13)
2017更新: valgrind is available。内置的malloc调试功能在Android N中得到了显着扩展,对于查找内存泄漏非常有用。您可能需要_exit()
该应用才能触发转储。
下面描述的DDMS功能目前在官方文档中获得brief mention。
您可以利用实验性的,不受支持的功能。
在DDMS配置文件中(例如Linux上的~/.android/ddms.cfg
),添加“native = true”。这将启用“本机堆”选项卡。
接下来,在设备上启用本机堆分配跟踪,然后重新启动应用程序框架:
% adb shell setprop libc.debug.malloc 1
% adb shell stop
% adb shell start
(注意这需要root。另请注意,这仅适用于最新版本;在旧版本中,您还需要手动将libc.so替换为设备上/ system / lib中的libc_debug.so。)
通过在发出简单命令(“adb shell ls”)时观察logcat输出,您可以判断是否已正确配置设备。如果你看到:
I/libc ( 4847): ls using MALLOC_DEBUG = 1 (leak checker)
然后你知道你启用了它。
现在,您可以使用“本机堆”选项卡功能来获取堆内存使用情况的快照。
DDMS会自动从Android源代码树中的.../symbols/system/lib
共享库中提取符号。当然,这要求您拥有完整的Android源代码树,并且您的设备正在运行从中构建的代码。否则,堆栈跟踪无法解码为符号名称,这会降低功能的实用性。
答案 1 :(得分:0)
你需要在测试运行之前和之后拍摄快照。 然后按+/-按钮 然后它将显示保留的内存位置。
答案 2 :(得分:0)
我也用过JB,JB +,KITKAT和棒棒糖。 它是在android中找到泄漏的非常好的工具。