找回密码
 立即注册
搜索
热搜: 星闪 最新 活动
查看: 335|回复: 0

内存泄露自查

[复制链接]

33

主题

2

回帖

145

积分

注册会员

积分
145
发表于 2024-8-30 15:58:42 | 显示全部楼层 |阅读模式

方法一:
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)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【淇诺科技】技术论坛 ( 粤ICP备14010465号-1|粤ICP备14010465号-1 )

GMT+8, 2026-4-4 17:46 , Processed in 0.152369 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表