gpt4 book ai didi

android - 检测 Android JNI 代码中的 native 内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:42 25 4
gpt4 key购买 nike

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

最佳答案

2017 年更新: valgrind is available对于安卓。内置的 malloc 调试功能在 Android N 中得到了显着扩展, 并且对于查找内存泄漏非常有用。您可能需要 _exit() 应用程序来触发转储。

下面描述的 DDMS 功能目前获得 brief mention在官方文档中。


您可以利用一项不受支持的实验性功能。

在您的 DDMS 配置文件中(例如 Linux 上的 ~/.android/ddms.cfg),添加“native=true”。这会启用 Native Heap 选项卡。

接下来,在设备上启用 native 堆分配跟踪,并重启应用程序框架:

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

(请注意,这需要 root。另请注意,这仅适用于最新版本;在旧版本上,您还需要在设备上的/system/lib 中手动将 libc.so 替换为 libc_debug.so。)

您可以通过在发出简单命令(“adb shell ls”)时观察 logcat 输出来判断您是否已正确配置设备。如果你看到:

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

那么你就知道你已经启用了它。

现在您可以使用 Native Heap 选项卡功能来获取堆内存使用情况的快照。

DDMS 会自动从 Android 源代码树中的 .../symbols/system/lib 共享库中提取符号。当然,这需要您拥有完整的 Android 源代码树,并且您的设备正在运行从中构建的代码。否则,堆栈跟踪无法解码为符号名称,这会降低该功能的实用性。

关于android - 检测 Android JNI 代码中的 native 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3768463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com