检查Android本地代码的内存泄漏(Detecting memory leak in Android native code)
来源:互联网 发布:royals知乎 编辑:程序博客网 时间:2024/05/17 22:36
1 启动独立的ddms(不是从Eclipse启动),
在终端敲命令$ddms
如果提示ANDROID_SWT没有设置,可以在当前终端下敲:
export ANDROID_SWT=~/mydroid/out/host/linux-x86/framework
不过下次打开新终端需要重新设置,为了避免这样的麻烦,可以将这一句添加到 ~/.bashrc
把/system/lib/libc.so和/system/lib.libc_debug.so pull出来,备用,以便回滚,留意一下他们的大小,后面会用到。
2 想要将模拟器中的/system/lib/libc_debug.so做个拷贝,重命名为libc.so,覆盖原来的libc.so,
我试过这个办法,可是失败了:把libc_debug.so pull出来,重命名为libc.so,然后再push回去(/system是只读的,需要重新mount为可读可写,mount方法见步骤6),覆盖原来的libc.so,可是重启模拟器后,又自动复原了。
所以这个办法不可行,改用以下办法:
先替换out目录下的libc.so,再重新生成system.img,
通过搜索发现,libc.so和libc_debug.so在out/目录下有多个版本,obj/目录下的肯定不会用来打包,就看是用../symbols/system/lib下的还是../system/lib下的了,
通过和之前从模拟器上pull下来的libc.so,libc_debug.so的size作比较,可以确定用的是../system/lib下的(疑问:是不是这个版本没有符号表阿?那后面ddms怎么给出调试信息?)。
把libc.so删了(我们已经从模拟器pull了一个libc.so备份,所以不用再备份了),拷贝一个libc_debug.so,重命名为libc.so
重新打包system.img, $~/mydroid/out/host/linux-x86/bin/mkyaffs2image -f ~/mydroid/out/target/product/generic/system ~/mydroid/out/target/product/generic/system.img
3 在~/.android/ddms.cfg中加一句: native=true
.android是隐藏文件,如果看不到,在~目录下按Ctrl+H
4 为了在ddms中显示File和Line信息,还要设置两个环境变量
把/home/peipei/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin加到PATH,让ddms找到arm-eabi-addr2line,
设置export ANDROID_PRODUCT_OUT=~/mydroid/out/target/product/generic,让ddms找到调试信息
5 重启模拟器和ddms,可以看到ddms的界面中多了一个Native Heap标签,切换到Native Heap标签,选择一个进程,点击Full Update,有个小窗口会不停的刷新闪动,耐心的等一会儿,好了,你看到所有信息了(包括File和Line,如果没有步骤4,你就看不到这两列),另外Log中可能搜索到MALLOC_DEBUG = 1 (leak checker)了,这也说明我们做对了。
6 顺便说一下,这个过程中,还学到了如何将/system这个默认只读的文件mount为可读可写(虽然往里面写的东西貌似会在重启模拟器后消失):
$adb shell
#mount //查看已经挂载的目录信息
#mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system //最后两个参数参考上一步的信息
参考文献:
https://tor-proxy.net/proxy/express/browse.php?u=http%3A%2F%2Fwww.mail-archive.com%2Fandroid-porting%40googlegroups.com%2Fmsg06395.html&b=26
- 检查Android本地代码的内存泄漏(Detecting memory leak in Android native code)
- Howto find native code memory leak in Android
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android WebView Memory Leak WebView内存泄漏
- Android中常见的内存泄漏 memory leak
- VC环境下检查内存泄漏memory leak的方法
- VC环境下检查内存泄漏memory leak的方法
- A contract for Patrick Willis
- HTML学习(5)集成多媒体
- html 下拉框
- getServletContext和getServletConfig中getInitParameter的区别
- hdu3371一个“ ; ”一个郁闷
- 检查Android本地代码的内存泄漏(Detecting memory leak in Android native code)
- DataGrid与MSFlexGrid的区别
- ORA-01940:无法删除当前已链接的用户
- MeeGo1.0 toolbar界面定制
- PHP记事
- 什么是SCADA
- 从C语言到汇编,从汇编到C语言
- 用GTmetrix来优化你的网页(集成了YSlow、FireBug的功能)
- What a perfect team do?