DDMS调试native heap实战

Android开发————分析Native层内存泄漏 Android开发——使用DDMS分析Native层内存泄漏针对Java层的内存泄漏,Android提供了方便的内存泄漏检测工具,例如MAT、LeakCanary。但对于native层开发,要追查C/C++代码的内存泄漏,valgrind等常用工具并不适用。幸好,Google的bionic库提供了新的方法。下面就介绍如何利用DDMS分析Native层的内存泄漏。检查是否有 libc_malloc_d 阅读详情
第一步:setprop libc.debug.malloc 1。这里有四种prop可以设置,1是mem leak,5和10是内存越界,

20是虚拟机。可悲的是5和10并没有被libc_malloc_debug库完美地支持,所以只有1好用。


第二步,stop, start。这些操作都是在device shell里面做的。设备会快速重启。


第三步,验证prop。getprop看看结果,然后ls一下,去logcat里看一下结果。如果结果都能对的上,那就可以继续了。


第四步,在ddms.cfg文件最后增加一行native=true并save。ddms.cfg位于c:\Users\xxx\.android目录下。


第五步,打开单独的ddms(确保eclipse没有在跑),选择Native Heap页面,点击snapshot按钮。

snapshot的过程有点慢。最后能看到每个so占用了多少内存以及百分比。

过一段时间snapshot一次就能看到每个so的趋势了。


第六步,分析。snapshot显示了分配内存的地址(记做addressA),

这个地址是RAM地址,不是so的相对地址。为了得到相对地址,

需要ps一下,找到你的pid,然后cat /proc/pid/maps,找到so的起始地址

(记做addressB)。然后拿addressA - addressB,得到相对地址,用addr2line定位到哪一处调用。

这里我还用过objdump -dS libXXX.so > XXX.dump,把so反编译出来,分析XXX.dump,

找到相对地址的调用位置



跑脚本,启动和关闭联系人

 for i in `seq 10000`; do adb shell am start com.android.contacts; sleep 1; adb shell am force-stop com.android.contacts; done

第七步:snapshort current native heap usage 对比观察库文件(libhwui.so)

占用的内存是否增加不减少


Android-HeapSnap是一款针对Android进程堆内存泄露追踪工具 HeapSnap 是一款针对Android进程堆内存进行追踪、定位,以便查出泄露位置的工具 立即下载

相关推荐

【AUCell打分】:评估一个基因集在单细胞转录组的每个细胞中特定的活性程度

AUCell使用曲线下面积来计算输入基因集的一个有意义的基因子集是否在每个细胞的表达基因中富集。AUC 分数在所有细胞中的分布允许探索特征的相对表达。由于评分方法是基于排名的,因此 AUCell 与基因表达单位和归一化程序无关。此外,由于细胞是单独评估的,因此可以很容易地应用于更大的数据集。

weixin_40695088的博客 1万+

Android 内存分析(java/native heap内存、虚拟内存、处理器内存 )

通过Byte数组和Bitmap来了解,dalvik java 堆内存、native heap 内存、32位设备3G虚拟内存,手机处理器内存等等。

HeXinGen的博客 9176

ROS激光雷达动态避障算法优化(C++实战)

本文深入探讨了ROS激光雷达动态避障算法的C++实战优化。针对动态环境的核心挑战,文章系统性地介绍了从激光数据预处理(降噪、瘦身)、动态障碍物检测与跟踪,到基于动态窗口法(DWA)的智能决策与调优的全流程。重点分享了如何将障碍物速度预测融入DWA打分函数,以实现更安全、流畅的避障,并提供了工程架构、性能优化及真机调试的实用建议。

weixin_29192141的博客 945

Native heap 和Dalvik heap 学习总结

最近在开发flutter app,发现flutter app的内存使用和之前android java app 有很大区别,flutter app 运行时Native heap占大头,android java app运行时, dalvik heep 占大头。 于是重新学习了一遍android内存知识,大致总结如下 1,进程的地址空间分为stack和heap, stack是栈,由操作系统控制, 函数地址、参数,内部变量都在栈上,栈不大,一般几MB heap是堆,由程序员控制,所以malloc, ne

kuanxu的专栏 1888

三菱CNC数据采集实战:从环境搭建到代码实现的完整指南

本文提供了一份完整的三菱CNC数据采集实战指南,涵盖从开发环境搭建、核心SDK获取、网络配置到基于C#和A2协议的完整代码实现。文章详细解析了初始化、连接管理、数据获取与展示四大核心模块,并分享了错误处理、性能优化及与MES系统集成的关键技巧,帮助工程师快速构建稳定可靠的工业数据采集系统。

wood5的博客 890

LaTeX参考文献格式apsrev4-1,增加文献标题

APS的LaTeX参考文献格式apsrev4-1是隐藏标题的,如果想要出现标题,需要更改apsrev4-1.bst文件内容 在apsrev4-1.bst文件靠后部分,定义不同类型文献格式的地方,将article类型的内容替换为, FUNCTION {article} { output.bibitem format.authors booktitle empty$ { "author" output.check }{ output } if$ author format.

loading1234567的博客 5031

Android内存分析和调优(下)

最后一部分是关于native heap,.dex,/dev/other的优化。 Native Heap分析和优化 android的DDMS可以帮助查看c++ native heap的使用,但需要一定的配置,而且必须是root的手机。 在~/.android/ddms.cfg增加"native=true"。这样子ddms才会有native heap的tab。 指向下面adb命令打开mal...

weixin_30879169的博客 455

基准电压 + 运放 + 低边MOS恒流源控制原理

因为恒流源强制 Iout不变,而 Vin​ 增加时,负载压降 Iout⋅Rload不变,多余的电压只能由MOS管的 VDS承担,因此 VDS必然增加。在饱和区,MOS 管的 ID 仅由 VGS决定,与 VDS 无关,这样,负载变化时,VDS可自由调整以维持 Iout恒定。当 Vin​ 小到无法满足 VDS>VGS−Vth时,MOS管进入线性区,Iout 会随 Vin​ 下降而减小,恒流失效。由于 Vref和 Rsense未变,Iout无需调整,运放无需动作,OUT保持不变,Iout恒定。

weixin_50643237的博客 2656

JVM的Heap Memory和Native Memory

JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory。前者我们比较熟悉,是供Java应用程序使用的;后者也称为C-Heap,是供JVM自身进程使用的。Heap Memory及其内部各组成的大小可以通过JVM的一系列命令行参数来控制,在此不赘述。Native Memory没有相应的参数来控制大小,其大小依赖于操作系统进程的最大值(对于32位系统就是3~4G,各种系统

Venus专栏 1万+

本地部署 Bolt.new - 小学生都能轻松搭建AI编程环境

本地部署 Bolt.new - 小学生都能轻松搭建AI编程环境

engchina的专栏 8626

Vue3 - 详细实现流程图编辑器可视化平台示例代码,打造前端web网页流程图在线编辑绘制操作展示,vue3自定义绘制流程图在页面上画流程图功能(提供各种操作按钮及节点控件,界面美观交互式流程图插件)

vue3,绘制流程图,在线流程图制作,在vue3中实现流程图,vue3做一个制作流程图的功能,vue3流程图组件,vue3流程图,流程图绘制展示,vue3流程图可视化在线编辑源码,基于VUE3的在线绘制流程图工具,vue3+logicflow流程图,绘制动态流程图并自定义节点和线,vue使用logicFlow绘制流程图,生成各种流程图图形可连接点移除,基于Vue的流程图组件,工作流程图,流程编辑器,vue3流程组件,vue-flow绘制流程图,绘制流程图示例demo,vue3 logicflow流程图使用教

🏆 前端领域优质创作者 9967

使用DDMS中的native heap检查Android native内存泄露

检查手机上目录system/lib(system/lib64)下存在libc_malloc_debug_leak.so、libc_malloc_debug_qemu.so(eng或者user-debug版本自带) setprop libc.debug.malloc 1(android7.0以后设置新属性 :setprop libc.debug.malloc.options backtrace ...

wuhengde的专栏 5458

利用 SAP Joule 提升 ABAP 开发效率的前提条件与限制全解析

综上,想要在 ABAP Development Tools 中顺利使用 SAP Joule,既要准备好 BTP、IAS、ABAP 系统与 ADT 的版本与信任链,也要理解许可证、配额、语法范围等限制。只有在这些前提全部满足后,Joule 才能真正发挥生成式 AI 的价值,帮助 ABAP 开发者从繁琐模板中解放出来,把注意力投入在业务创新与 Clean Core 改造之上。未来 SAP 还将扩展中文语境、自动修复建议以及跨系统智能代理等功能,值得持续关注。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 663

Android DDMS heap内存分析工具简单使用

DDMS

QG 510

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

内存泄漏调试-调Native Heap

$ adb shell setprop libc.debug.malloc 1   $ adb shell stop   $ adb shell start Open C:\Users\ian\.android\ddms.cfg Add a line "native=true" 打开DDMS,点Native Heap标签,就可以Snapshot了

AKeywordSE的专栏 1230

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

FAQ05872]如何用DDMS分析native memory leak

[FAQ05872]如何用DDMS分析native memory leak 2016-08-10 平台MT6572MT6589MT6582MT6588... 软件分支JB2GB3JB3JB5... 内容 [DESCRIPTION] native程序如果发生内存问题,一般都比较难查,幸好DDMS有集成native memory

zhbpd的专栏 680

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

zhangbijun1230的专栏 1762

DDMS调试方法

1.保证所用的adb是从自己的代码编译出来的 cp out/host/linux-x86/bin/adb /usr/bin 2. 设置android环境变量: . build/envsetup.sh choopseproduce pxa988dkb_def 3. enable native heap debug, open the file ddms.cfg and a

灵思致远Leansmall的博客 790

[Android]App native heap to check

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34407348的博客 75

android调试工具DDMS

具体可见http://developer.android.com/guide/developing/tools/ddms.html 。 DDMS为IDE和emultor、真正的android设备架起来了一座桥梁。开发人员可以通过DDMS看到目标机器上运行的进程/现成状态,可以 android的屏幕到开发机上,可以看进程的heap信息,可以查看logcat信息,可以查看进程分配内存情况,可以像目标机

zy81584的专栏 1017

Android 内存监测工具 DDMS --> Heap

用 Heap监测应用进程使用内存情况的步骤如下:   1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;   2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式,而不是作为“Mass Storage”;   3. 链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;

anig2014的专栏 568

android--------Eclipse中ddms heap内存分析工具

无 论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。 Android tools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使用eclipse的ADT插件,并以真机为例,在模拟器中的情 况类似)。用Heap监测应用进程使用内存情况的步骤如下:1. 启动eclipse后,切换到DDMS视图,并确认Devices视图、...

切切歆语的博客 452

Native Heap分析和优化

最后一部分是关于native heap,.dex,/dev/other的优化。 Native Heap分析和优化 android的DDMS可以帮助查看c++ native heap的使用,但需要一定的配置,而且必须是root的手机。 在~/.android/ddms.cfg增加"native=true"。这样子ddms才会有native heap的tab。指向下面adb命令打开m

Aaronzzq的专栏 5304

DDMS调试方法 分类: Android开发 ...

1.保证所用的adb是从自己的代码编译出来的 cp out/host/linux-x86/bin/adb /usr/bin 2. 设置android环境变量: . build/envsetup.sh choopseproduce pxa988dkb_def 3. enable native heap debug, open the file ddms.cf...

weixin_30485291的博客 89

Android进阶篇-使用DDMS查看内存(Heap)变化

用 Heap监测应用进程使用内存情况的步骤如下:1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式,而不是作为“Mass Storage”;3. 链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;4. 点击选...

weixin_30767921的博客 109

调试Android native代码内存泄漏

对C/C++程序员而言,要说碰到最头疼的问题,无疑就是内存泄漏问题。解决内存泄漏问题似乎很简单,就是秉承一个原则:分配的内存一定要即时释放。然而在实际场景中,随着代码复杂度的增加,要遵守这一原则非常困难,而且随着面向对象、模块化、多线程的引入,更难以判断内存该由谁来释放。为了解决这一难题,C++引入了智能指针和引用计数等。然而引用计数无法解决两个对象相互持有对方引用而引起的内存泄漏。

云水木石 3076
上一篇: C与C++互相调用
下一篇: EGLImage in SurfaceFlinger
MM-Graphics
博客等级 码龄19年 135粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值