稳定性测试出现aboutToBeDeleted生命周期函数抛jscrash异常
1 关键字 jscrash;aboutToBeDeleted;属性未定义 2 问题描述 设备版本:3.2Release 使用wukong进行随机测试,在测试过程中出现大量发生在TS生命周期函数aboutToBeDeleted中的jscrash,问题栈名均为aboutToBeDeleted,挑选其中一个jscrash如下图: 3 问题原因 3.1 正常机制 使用wukong工具进行随机测试,TS生命
1 关键字
jscrash;aboutToBeDeleted;属性未定义
2 问题描述
设备版本:3.2Release
使用wukong进行随机测试,在测试过程中出现大量发生在TS生命周期函数aboutToBeDeleted中的jscrash,问题栈名均为aboutToBeDeleted,挑选其中一个jscrash如下图:
3 问题原因
3.1 正常机制
使用wukong工具进行随机测试,TS生命周期函数aboutToBeDeleted不会抛出jscrash异常,测试全部通过。
3.2 异常机制
使用wukong进行随机测试,在测试过程中出现大量发生在TS生命周期函数aboutToBeDeleted中的jscrash,问题栈名均为aboutToBeDeleted,挑选其中一个jscrash如下图:
源码:
4 解决方案
在执行aboutToBeDeleted函数之前,对其对应的js对象进行是否未定义的判断,修改方案如下图:
5 定位过程
1.首先根据通过jscrash问题定界脚本将该jscrash文件进行解析,解析后获取到对应报错应用名:com.ohos.settings 以及问题栈名:aboutToBeDeleted;
2.根据栈名发现是TS生命周期函数aboutToBeDeleted下的异常,因此去查找对应的js代码行,通过错误信息:read property __appInfo of undefined大致定位是因为__appInfo未定义导致抛异常,再进一步看该代码行,__appInfo是this所调用,因此得出结论是因为this未定义导致__appInfo未定义。
3.因此需要在执行aboutToBeDeleted函数前判断js对象是否已定义。
6 知识分享
ets编译后生成的js文件中会有一个生命周期函数:aboutToBeDeleted,该函数是在页面销毁时触发,函数中会对组件的相关属性进行删除销毁操作,但在极低概率下,调用此函数前,js对象本身已经销毁,this不存在,在调用其属性时,会抛出属性未定义的错误,需要底层在调用aboutToBeDeleted前,对js对象做是否未定义的判断。
更多推荐
所有评论(0)