android c 内存泄露,GitHub - wangwangchen/NativeLeakProf: Android Native代码(C/C++)内存泄露分析...

本文介绍了一款用于分析Android Native代码(C/C++)内存泄露的工具,通过Hook内存申请函数获取堆栈信息,记录内存大小,并提供API导出泄露内存和堆栈。用户可以使用提供的python脚本解析堆栈数据并生成火焰图,帮助定位内存问题。
摘要由CSDN通过智能技术生成

NativeLeakProf

Android Native代码(C/C++)内存泄露分析

Hook内存申请本地函数,在替换函数中获取堆栈,在内存中记录申请的内存大小以及堆栈信息

提供API导出动态库泄露(申请了但是未释放)的内存大小

提供API导出动态库泄露堆栈到文件

提供python脚本解析导出的泄露堆栈信息,并生成火焰图,python脚本

使用

添加依赖

implementation 'com.liang.qiu:nativeleakprof:1.0.1'

初始化

在Application的attachBaseContext方法里调用

@Override

protected void attachBaseContext(Context base) {

super.attachBaseContext(base);

NativeLeakProf.init(this);

}

获取动态库泄露内存大小列表信息

NativeLeakProf.dumpLeakInfo();

通过dumpLeakInfo方法,可以导出如下的字符串信息

libGLESv2_adreno.so leak: 2.258709MB

libhwui.so leak: 439.270508KB

libc.so leak: 26.500000KB

total leak: 2.713563MB

堆栈导出

调用dumpLeakStack方法导出堆栈,位置在/data/data/xxx.xxx.xxx/files/NativeLeakProf_Stack_xxxxx.txt

NativeLeakProf.dumpLeakStack();

解析堆栈

调用nl_stack_parser.py这个python脚本来解析堆栈数据(自行通过adb pull导出到电脑),举个栗子

/usr/bin/python ~/Documents/AndroidProject/NativeLeakProf/nlp_stack_parser.py ~/android/android-sdk-macosx/ndk-bundle/ ~/Documents/AndroidProject/NativeLeakProf/sample/NativeLeakProf_Stack_c39243bb-4132-4da2-88d9-1e0cfec38627.txt arm64-v8a ~/Documents/AndroidProject/NativeLeakProf/app/build/intermediates/cmake/debug/obj/arm64-v8a/

参数如下

/usr/bin/python ~/Documents/AndroidProject/NativeLeakProf/nlp_stack_parser.py "android ndk路径" "stack文件路径" "arm架构(armeabi/armeabi-v7a/arm64-v8a)" "带符号表so所在目录"

样例(有待完善)

sample.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值