Android Native内存分析

Google官方的调试本地内存工具:

https://source.android.com/devices/tech/debug/native-memory

1.malloc debug:
    adb shell setprop wrap.com.gritworld.gritmobile '"LIBC_DEBUG_MALLOC_OPTIONS=backtrace\ leak_track\ logwrapper"'
    adb shell am force-stop com.gritworld.gritmobile
    关掉应用,再打开
    adb shell am dumpheap -n PID /data/local/tmp/heap.txt
    开启后,apk运行太慢。
    
    2.malloc hook:
    adb shell setprop wrap.com.gritworld.gritmobile '"LIBC_HOOKS_ENABLE=1"'
    adb shell setprop wrap.com.gritworld.gritmobile '"LIBC_DEBUG_MALLOC_OPTIONS=backtrace logwrapper"'
    adb shell setprop wrap.com.gritworld.gritmobile '"LIBC_HOOKS_ENABLE=1 leak_track logwrapper"'
    adb shell am force-stop com.gritworld.gritmobile
    adb shell am dumpheap -n PID /data/local/tmp/heap.txt
    开启后,apk运行太慢。
    
    3.HeapSnapshot:
    https://github.com/albuer/heapsnap

    https://blog.csdn.net/lin20044140410/article/details/107893098
    需要把开源库中的源码编译出可执行文件,库。编译时,开源库中缺少以下依赖库:libbase.so,libc_malloc_debug.so,libc++.so,libdexfile_support.so,libdl.so,liblzma.so,libunwindstack.so
    可以从手机导出,或者下载AndroidAOSP源码自己编译出相关库。
    使用编译出的文件,在Demo中没能检测到native内存泄漏,后续再看看。

    4.Address Sanitizer:
    安装时提示,手机设备不支持。

基于LeakTracer的内存泄漏检测工具:

LeakTracer文档 :
http://www.andreasen.org/LeakTracer/
https://github.com/fredericgermain/LeakTracer

这是我本地调试OK的,可以在android studio上运行的Leak Tracer :https://github.com/whcx/LeakTracerAndroid.git

导出:   libnative_heap.so ,native_heap.txt ,库的名字,dump内存文件名注意跟cmakelist中,

writeLeaksResultToFile方法中的命名一致。

    执行命令:./leak-analyze-addr2line64 libleaktracer.so native_heap.txt >info.txt,解析疑似内存泄漏的调用堆栈。
    


    
    
    
    
 

你可能感兴趣的:(android开发,LeakTracer)