2017年更新: valgrind 可用对于安卓。内置的 malloc 调试功能在以下版本中得到了显着扩展:安卓N,对于查找内存泄漏非常有用。您可能需要_exit()
应用程序触发转储。
下面描述的 DDMS 功能目前获得了简短提及在官方文档中。
您可以利用一项不受支持的实验性功能。
在您的 DDMS 配置文件中(例如~/.android/ddms.cfg
在 Linux 上),添加“native=true”。这将启用“本机堆”选项卡。
接下来,在设备上启用本机堆分配跟踪,并重新启动应用程序框架:
% 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)
然后你就知道你已经启用了它。
现在,您可以使用本机堆选项卡功能来获取堆内存使用情况的快照。
DDMS会自动从.../symbols/system/lib
Android 源代码树中的共享库。当然,这要求您拥有完整的 Android 源代码树,并且您的设备正在运行根据它构建的代码。如果不是,则堆栈跟踪无法解码为符号名称,这会降低该功能的实用性。