native程序如果发生内存问题,一般都比较难查,幸好DDMS有集成native memory leak(仅仅针对app,无法分析mediaserver等非app的进程)功能,通过DDMS可以观察native堆的使用状况以及每个chunk的调用栈等信息,有助于分析native memory leak。
详情可参考:https://source.android.com/devices/tech/debug/native-memory.html

1. 请使用eng版本测试。

2. 首先要先开启bionic memory debug 1模式(bionic malloc debug信息可以到网络搜索相关资源),然后连上adb。

方法如下:

KK及以前版本:

adb shell setprop persist.libc.debug.malloc 1
        adb shell reboot

L及以后版本:

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

确认是否有开启的方法,查看main log,如有看到以下log,就说明开启成功啦

3. 开启DDMS隐藏的功能 (建议用linux版本的DDMS)

需要改一个配置. 找到

linux版本:~/.android/ddms.cfg

windows版本:C:\Documents and Settings\$user\.android\ddms.cfg

在ddms.cfg结尾新增一行: native=true 保存后重启ddms

就可以看到新加的一个'native heap'的tab了

4. 打开DDMS,选择需要查看native memory的进程:

5. 切换到native heap菜单,填入symbols search path(因为是linux路径,所以windows不能用,这导致第6步的结果没有函数名称信息,只有函数地址!),点击snapshot current native heap usage就可以看到当前native heap的状况
6. 点击保存后,可以导出一个文本文件,打开后,可以看到一个个记录,它们分配大小*分配次数从大到小排列,所以如果有泄露的话,一般看一个记录就够了,拿到调用栈再结合代码分析可能的泄露点

Android 系统(30)---如何用DDMS分析native memory leak相关推荐

  1. Android系统(31)--- 如何分析native memory leak

    如何分析native memory leak 分析native程序发生内存泄漏问题,就需要对每一笔内存申请做记录,释放内存时清除记录,然后在认为存在内存泄漏时将记录提取出来分析,看看在哪段代码存在申请 ...

  2. android启动流程之lk,Android系统之LK启动流程分析(一)

    1.前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是 ...

  3. Android系统的启动流程简要分析

    这是我结合网上的资料以及自己分析android4.4的源码整理的笔记,对整个安卓系统的流程启动进行了梳理,很多细节并未展开,只是简要的进行了介绍. 一.Android系统的架构介绍 Android的整 ...

  4. Android 系统源码代码情景分析

    一.本书简介 <Android系统源代码情景分析>是2012年10月出版的图书,作者是罗升阳. 在内容上,本书结合使用情景,全面.深入.细致地分析了Android系统的源代码,涉及到Lin ...

  5. 全志平台Android系统WIFI架构工作流程分析

    1. 前言 记录个人最近对Android wifi的了解和使用感受, 并为想入门.学习Android wifi的人员提供一定的参考 2. Android系统中的WIFI架构 wifi在Android中 ...

  6. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(6)

    接下来,我们再来看看server模块的实现.在external/ashmem/common目录下,只有一个源文件SharedBufferServer.cpp,它实现了内存共享服务SharedBuffe ...

  7. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析

    出自:http://blog.csdn.net/luoshengyang/article/details/6939890 在Android系统中,针对移动设备内存空间有限的特点,提供了一种在进程间共享 ...

  8. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(7)

              同样,我们需要为这个Client端应用程序编译一个编译脚本,在external/ashmem/client目录下,新建一个Android.mk文件,它的内容如下所示: LOCAL_ ...

  9. 由Asset中的double free引发的Android系统及APP崩溃问题分析

    前言 这个问题在来小米之前就遇到并解决过,当时的解决方案与朴老师的初步解决方案一样,本文在之前的初步分析结果之上进一步进行了深入分析,最终得出了当前看起来相对合理并符合原来架构设计的最终方案. 文中引 ...

最新文章

  1. MFC下的MessageBox使用_附带CBUTTON
  2. bzoj 4010 菜肴制作
  3. Java反射最佳实践
  4. C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中
  5. Promise 到底是什么?看这个小故事
  6. Vue.js2.0开发环境搭建(三)
  7. jquery 序列化表格内容为字符串(serialize)
  8. linux命令大全_Linux 系统下查看硬件信息命令大全
  9. cat3 utp是不是网线_科普向:关于网线必须了解的基本知识!
  10. Windows系统口令扫描之——使用NTScan扫描Windows口令
  11. @interface List
  12. C# MemcachedHelper 帮助类 控制台程序
  13. 年薪百万不如狗?深圳的程序员才是买房界的黑天鹅!
  14. 卧槽,javaCV不到十行代码实现图片OCR文字识别
  15. 带你理解beta分布
  16. 以下计算机的分类 不正确,按CPU芯片可分为单片机、单板机、多芯片机和多板机...
  17. 8.22 问题 B: 海岛争霸
  18. 打算打造一个最牛iOS培训品牌
  19. 联通3G APN设置
  20. chromium-browser添加flash插件

热门文章

  1. 径向基(Radial basis function)神经网络、核函数的一些理解
  2. 新格尔软件测试大师,新格尔神雕软件
  3. 缓存类java_用Java写一个简单的缓存操作类
  4. Java并发编程之CountDownLatch/CyclicBarrierDemo/SemaphoreDemo详解
  5. 微信小程序|开发实战篇之request请求(单个、多个参数,json对象,header)
  6. MongoDB之GridFS
  7. Class中Query Filter
  8. SpringSecurity实现记住我功能
  9. git从入门到精通(四)(删除本地标签,删除远程标签)
  10. 洛谷—— P2733 家的范围 Home on the Range