|
|
方法一:
1,首先要关闭跳转动画,再ability.cpp中将userTransition 直接置为false;(避免其他细碎的东西干扰节点数)
2,再需要检查的slice的presenter的构造函数中调用EnableLeakCheck(true),在析构函数中调用EnableLeakCheck(false),并包含头文件;如睡眠的slice如下: (选定范围在presenter构造和析构之间出现大量节点释放,打印出来的就可能是部分存在泄漏的点)
3.烧录版本操作手环进入需要查找的slice,再退出查看下图log打印,并记录下打印出来的所有info->count和info->size.
4.多进入几次并记录下打印。(反复进入打印出的count相同可能是该节点存在泄漏)
5.逐个选择其中一个打印调用Crash()的AT指令:如
[Graphic Error] [EnableLeakCheck: 110]leakcheck: [11] addr 0x6c3b518c size 168
以上打印就调用AT指令 AT^UIKIT_DFX=crashmem 12 56(进入slice前调用)
AT指令的意思是“当第十二次分配内存时,会主动Panic崩溃(注意此时的56仅仅是一个校验,当前周期第十二次申请的内存与输入的大小56不同时,会给出一个提示)”,每次调用到那次就会崩,需要查看lst文件,查看mepc指针定位
AT指令需自行代码添加SDK并没有
1.在dfx_cmd.cpp文件中添加
2.在mem_check.h中添加:
方法二:
在Ability.cpp的PostChangeSlice(const uint16_t targetSliceId,const uint16_t transitionId,const uint16_t priority) 里加红色框打印:
编译烧录版本之后,只要切换slice界面,串口就会出现如下打印:
测试方法:
在两个slice页面间来回切换多次,观察串口打印的free size大小变化,如果free size的大小连续下降或者free size的大小呈下降趋势,说明此页面存在内存泄漏的情况,需要进一步用方法一排查。
方法三:
调用AT^LSFD命令查看当前正在运行的系统资源文件,用于排查某些页面下文件有无释放。(来回切换发出AT指令若还存在上个页面得bin文件证明没有释放完全)
该命令是客户封装的,里面用的是我们的实现接口。
void Isfd(void)
|
|