-------------使用工具---------------

mtk coredump 功能、coredump文件解析工具 GAT(Official)_ALPS、coredump报告分析工具 SpOfflineDebugSuite(Official)_ALPS。工具都包括windows&linux版本

 

------------使用流程简介----------

1、开启mtk coredump、malloc debug

2、进行测试case的压测,可以进行大量的压测为基础,在即将运行结束的时候kill 掉 需要进行内存跟踪的线程

3、获取到产生的coredump文件,使用GAT工具进行解析

4、对解析生成的db文件夹进行 数据分析,产生对应的报告

 

-----------详细的的使用流程和设置命令---------

1、开启mtk coredump、malloc debug

打开 coredump:

手机平台对应的是mtk的版本,一般测试使用的手机都是root版本,O版本之后都是默认开启coredump功能的。

具体的查看方法: adb shell getprop | grep aeev.core

出现对应的属性值是 enable就是证明打开了coredump,如下所示

[persist.vendor.aeev.core.direct]: [enable]

[persist.vendor.aeev.core.dump]: [enable]

如果没有打开,使用下面命令打开即可

adb shell setprop persist.vendor.aeev.core.direct enable

adb shell setprop persist.vendor.aeev.core.dump enable

打开之后,需要设置mode的级别,不设置的话可能不出现coredump文件

adb shell setprop persist.vendor.mtk.aeev.mode 3

adb shell setprop persist.vendor.mtk.aee.mode 3

设置之后最好查看一下是否成功,保证最快抓到需要的的文件

 

设置malloc debug:

使用下面的命令可以暂时的监控对应的线程程序,重启之后就会失效,设置之后可以使用 adb shell getprop进行查看是否设置成功:

adb shell setprop libc.debug.malloc.options "backtrace=8 guard=8 leak_track"

adb shell setprop libc.debug.malloc.program native_exec

adb shell setprop libc.debug.malloc.program camerahalserver

其中program代表的是要监控的线程名称,native_exec就是我们的本地SDK测试的可执行文件,camerahalserver就是在线的SDK所在的进程名称,如果想监控app程序,直接设置对应app

进程名就可以了

第二种方式,就是单独建立一个prop文件来放置使用的属性值,这样重启还是生效的

adb shell "echo libc.debug.malloc.options = \"backtrace=8 guard=8 leak_track\" >> /data/local.prop"

adb shell "echo libc.debug.malloc.program = camerahalserver >> /data/local.prop"

adb shell "chmod 644 /data/local.prop"

adb reboot

 

2、环境准备好了,接下来就是傻瓜式的进行cases的测试,具体测试次数依据自己的实际情况进行判断。等到测试快要结束的时候,这个是相对与离线测试条件下,如果不及时的kill 进程,就不会产生

对应的coredump文件了。这个需要注意。对于在线来说,因为本身camerahalserver相机打开状态就一直在运行。所以在线的进程kill可以再测试结束一段时间之后,可以排除一些不必要的内存问题

具体的杀死进程命令,下面命令才能出现NE的错误,产生coredump文件,注意杀死对应的进程的ID

adb shell kill -11 $pid

 

3、获取对应的db文件,具体的目录是在 /data/aee_exp/ 或者是 /data/vendor/aee_exp 目录下面 ,甚至有的手机会在 /data/debuglogger/  目录下面,注意查看一下

具体的文件加是 下面这种格式的 db.00.NE  db.01.NE ,使用 adb pull 拉到本地就可以了

 

4、文件的解析,使用两个工具解析就可以了

4.1 使用GAT解析 db.00.NE.dbg ,生成 db.00.NE.dbg.DEC 解析文件夹目录

linux版本:

 ./gat-linux-x86_64-4/modules/spsst/tools/aee_db_extract 可执行文件后面直接加db文件即可。最新版本的aee_extract 直接将内部的coredump.dbg也解析出来了,所以直接使用aee_extract就OK了

 ./gat-linux-x86_64-4/modules/spsst/tools/aee_db_extract  path/db.00.NE.dbg

windows版本:

会有对应的exe文件,在dos命令窗口下面解析即可,可以参照上面目录找到对应的windows版本的执行文件

path/aee_db_extract.exe path/db.00.NE.dbg

 

5、使用SpOfflineDebugSuite 工具解析生成内存报告

SpOfflineDebugSuite 使用对应系统文件可以正常解析文件,需要在sysmbol中放入libc.so文件就可以解析出来对应的c_leak.txt文件,如果不放入c_leak.txt文件就不能生成具体的泄露信息。因为malloc debug这个堆信息

最底层是基于libc.so这个标准库函数的,所以需要有这个库来进行报告的栈信息解析,如果没有这个文件会报下面的问题:

sample: 这个依据版本实际使用的libc.so

mtk 平台架构 mtk平台工具_linux

加入libc.so就会正常:

mtk 平台架构 mtk平台工具_linux_02

正常回车之后的界面如下,使用对应命令生成对应文件就可以了:

mtk 平台架构 mtk平台工具_linux_03

其中 l 对应生成 c_leak.txt 文件,包含的是存在泄露的栈信息

dc 对应生成的是 c_heap.txt,包含的是c堆的内容

df 对应的生成的是 fd_dump.txt,包含的是句柄泄露的内容

其中c_leak.txt文件的具体内容格式如下:

 

 

具体使用是 linux ./OfflineSST64 /home/liulei/test/db.00.NE/db.00.NE.dbg.DEC 先解析生成sysmbol文件夹,然后放入libc.so文件,再次解析,按照提示进行对应文件的生成,其中 l <num> : l 100 就是把前一百的堆泄露过滤出来。dc 是显示c堆的内容

windows使用: 工具包使用setup.bat安装之后,右键上面解压出来的db.00.NE.dbg.DEC的文件夹就会出现 NE/NK -Analyze菜单功能,之后产生生成sysmbol文件夹,具体操作和上面一样,再次解析,按照命令就可以生成对应的c_leak_txt文件了。

后面解析之后具体使用到的文件就是 c_leak.txt、c_heap.txt、PROCESS_MAPS、PROCESS_MAPS_RAW这几个文件。然后给到开发来分析一下具体的问题就可以了  

 

工具包:包含GAT和SpOfflineDebugSuite 、c_leak.txt、libc.so链接:

链接: https://pan.baidu.com/s/1OzFBzRbsUtsFwy8EXkjkZw  密码: o8d9