检测Android JNI代码中的本地内存泄漏

 2023-01-20    349  

问题描述

如何检测Android JNI代码中的内存泄漏?我正在使用froyo

推荐答案

2017更新: valgrind可用 for Android.内置的Malloc调试功能在 Android N ,对于查找内存泄漏非常有用.您可能需要_exit()应用程序才能触发转储.

检测Android JNI代码中的本地内存泄漏

当前所述的DDMS功能当前获取简短提及官方文档


有一个实验性的,不受支持的功能,您可能可以利用.

在您的DDMS配置文件(例如Linux上的~/.android/ddms.cfg)中,添加”本地= true”.这启用了本机堆选项卡.

接下来,在设备上启用本机堆分配跟踪,然后重新启动应用程序框架:

% adb shell setprop libc.debug.malloc 1 
% adb shell stop 
% adb shell start

(请注意,这需要root.还请注意,这仅适用于最近的版本;在较旧的版本上,您还需要用libc_debug.so手动替换libc_debug.so in设备上的/system/lib.)

)

.

您可以通过在发出简单命令(” ADB Shell LS”)时观看LogCat输出来确定是否正确配置了设备.如果您看到:

I/libc    ( 4847): ls using MALLOC_DEBUG = 1 (leak checker)

然后您知道您已经启用了它.

现在您可以使用本机堆选项卡功能来获取堆内存使用的快照.

ddms将自动从…/symbols/system/lib您的Android源树中的共享库中提取符号.当然,这要求您拥有一个完整的Android源树,并且您的设备正在运行从中构建的代码.如果没有,则不能将堆栈跟踪解码为符号名称,从而降低了功能的有用性.

其他推荐答案

您需要在测试之前和之后拍摄快照.
然后按+/-按钮
然后它将显示保留的内存位置.

其他推荐答案

我也曾在JB,JB+,Kitkat和Lollipop中使用过.
它在Android中非常好的工具可以找到泄漏.

以上所述是小编给大家介绍的检测Android JNI代码中的本地内存泄漏,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26122.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。