一、
手机端准备工作
1、
安装库文件
所有的
native
内存分配函数
(
malloc
,
calloc
, etc.)
都在
Android
的
libc
库中。为了跟踪堆内存的分配,需要使用这个库的特别版本,可以将每次内存开销记录下来。
这些特殊版本的
libc
(
libc_malloc_debug_leak.so
and
libc_malloc_debug_qemu.so
可以在手机中的/system/lib
下查看是否有这两个库
)
只包含在eng或者user-debug版的
Android中。
如果手机是这两种系统之一,可以跳过下一步。
①下载最接近你手机模型和
Android系统版本(
2.3
、
4.0
等)的
CyanogenMod ROM
。如果没有恰好是你手机的对应版本,那么选择处理器相同的
(
比如
Tegra2)
和
Android系统版本(例如
2.3
)都相同的
rom.
。然后从
system/lib
文件夹
抽出
libc_malloc_debug_leak.so
和
libc_malloc_debug_qemu.so
。
②以中兴
U880
手机为例,手机本身是移动定制的
Android2.2
系统,
CyanogenMod
官网上恰有中兴的
rom,但是系统版本为
2.3.7
,并且手机需要
root
权限,所以使用
U880
刷机工具,刷U880_2.3.7 root
版
rom
。
2、
替换库
①从
CM
版
rom
中
/system/lib
文件夹中抽出
libc_malloc_debug_leak.so
和
libc_malloc_debug_qemu.so
②把
libc_malloc_debug_leak.so
和
libc_malloc_debug_qemu.so
通过
USB拷到
SDCARD卡根目录下。
③手机中安装
BusyBox
以便使用
cp
命令复制文件。
④PC端命令行中执行
adb shell
su
mount
不同手机返回的值不同,如下两例
LG G2x:
...
/dev/block/mmcblk0p1 /system ext3 ro,noatime,errors=continue,data=ordered 0 0
...
中兴
U880
:
...
/dev/block/
mtdblock11
/system
yaffs2
ro,relatime,barrier=1,data=ordered 0 0
...
第一部手机将
/dev/block/mmcblk0p1
作为设备,
ext3
作为文件系统类型。
第二部手机将 /dev/block/
mtdblock11
作为设备,
yaffs2
作为文件系统类型。
⑤使用上面得到的设备名,和文件系统类型,重新挂载系统分区为读写格式。如下所示:
LG G2x:
mount -o remount,rw -t ext3 /dev/block/mmcblk0p1 /system
中兴
U880
:
mount -o remount,rw -t yaffs2 /dev/block/ mtdblock11 /system
⑥
把两个库文件从S
DCARD 拷到
/system/lib
目录:
cp /sdcard/libc_malloc_debug_leak.so /system/lib/libc_malloc_debug_leak.so
cp /sdcard/libc_malloc_debug_qemu.so /system/lib/libc_malloc_debug_qemu.so
⑦
设置权限
chmod 0644 /system/lib/libc_malloc_debug_leak.so
chmod 0644 /system/lib/libc_malloc_debug_qemu.so
3、
配置
①
替换完新的库文件后,告知系统使用新的库分配内存。
②命令行中执行
adb shell
su
setprop libc.debug.malloc 1
支持的参数:
1 - perform leak detection
5 - fill allocated memory to detect overruns
10 - fill memory and add sentinels to detect overruns
20 - use special instrumented malloc/free routines for the emulator
|
③
重启框架
,命令行中继续执行
stop
start
如果命令成功,设备将在
1、
2
秒后重启,
注意并不是完全重启。
④
检查配置
输入:
getprop
将会得到很多信息,其中包括:
...
[libc.debug.malloc]: [1]
...
说明配置成功
二、PC设置
在C:\Documents and Settings\Administrator\.android\
ddms.cfg
文件末尾添加
native=true
三、检查泄露
从SDK\tools
中启动独立的
DDMS
(
ddms.bat
)可以看见
native heap
选项卡
点击snapshot current...
按钮就可以了,如果按下±按钮,在点击
snapshot current
可以比较两次之间新分配了哪些空间。
有人说使用自己用源码编译出来DDMS
和模拟器,下面的
stacktrace
中的
File
和
Line
列就有值了。我们用的是真机啊。。。没有关系
~~
找到自己的库函数***.so
后面的
Method
列中的地址。使用
NDK
中的
addr2line
工具,
用法:在命令行中addr2line.exe -e ***\obj\local\armeabi\***.so
地址
注意,一定要是obj
底下的
.so
,
lib
里面的是不含有符号表的。另外
Method
中的地址一般要将高
3
位置
0
,
80cc6e22
变为
000c6e22
。
80dxxxxx
的怎么变自己领悟吧。。。
- 大小: 69.3 KB
分享到:
相关推荐
二、Android(Java)中常见的容易引起内存泄漏的不良代码 1 (一) 查询数据库没有关闭游标 2 (二) 构造Adapter时,没有使用缓存的 convertView 3 (三) Bitmap对象不在使用时调用recycle()释放内存 4 (四) 释放对象的...
在Android应用程序中触发垃圾回收(GC) 5 监视Adroid应用程序的堆活动 5 终止Android进程 5 使用文件浏览器 6 从模拟器或设备上拷贝文件 6 向模拟器或设备拷贝文件 6 删除模拟器或设备上的文件夹 7 使用模拟器控制 ...
005_android 之DDMS中logcat的使用视频教材,讲解的比较详细,有兴趣的可以学习下哦。
一、概述 在Android的开发中,经常听到“内存泄漏”这个词。...工欲善其事必先利其器,要检测“内存泄漏”的发生,需要借助DDMS中的Heap工具及MAT工具,Heap工具用于大致分析是否存在“内存泄漏”,而MAT工具
006__android 之DDMS的使用视频教材,讲解的比较详细,有兴趣的可以学习下哦
android中的DDMS视图&Button;.ppt
Android DDMS如何使用?
主要从5个模块入手: 1 java的GC机制以及Android最大堆内存分配 2 Monitors 3 DDMS/Traceview 4 Mat 5 LeakCanary 6 开发中要注意的点。
精讲Android调试及DDMS的使用
关于在android当中DDMS的作用以及如何使用,你可以学习到DDMS的相关知识!
Android 调试工具ddms的devices栏目存在一个功能叫做start method profiling,此按钮顾名思义是启动method profiling的,而Android的Method Profiling功能,是可以在一段时间内记录所有运行过的函数,最后生成一个...
开发人员可以通过DDMS看到目标机器上运行的进程/现成状态,可以 android的屏幕到开发机上,可以看进程的heap信息,可以查看logcat信息,可以查看进程分配内存情况,可以像目标机发送短信以及打电话,可 以像android...
这是一个通过DDMS分析Android的CPU占用过高生成的TraceView文件,希望对使用TraceView有帮助。
[Android开发从零开始].6.DDMS视图和Button
android 用ddms截屏幕 实时显示
替换原来的DDMS文件,然后设置为可运行。 单独运行即可。
Android DDMS 找不到手机设备的最佳辅助软件,几乎所有的DDMS能成功找到设备,都是靠它成功的!很实用,毕竟是大公司!不过里面的推荐可以不装!
主要介绍android内存管理 以及MAT、DDMS等工具的使用