1. 问题
a. 运行测试用例时无疾而终
例如:运行 IntentionServiceTest 用例时,出现 RUN 字段后就异常退出,如下图
b. 导出 Crash 文件
导出的目录要提前建好,假设为 D:\Test\log\1\
c. 打开日志查看
显然 有一个包含 IntentionServiceTest 字段的 Crash 日志文件,打开查看,发现有 __cfi_check 字段
DD一下:欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。
`欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
2. 原因
经过搜索 cfi 字段发现,待测试模块存在 cfi 检查,而当前模块没有,相互调用时报告异常。 本着这个问题既不是第一次出现,也不是最后一次出现的想法,在当前子系统目录搜索,在很多 BUILD.gn 中终于找到了 cfi 的相关设置。
3. 解决方案
增加 cfi_check,如红框所示问题解决
含义如下:
4. 个别模块增加了 cfi 检查,在运行时还会崩溃的处理
经过分析存在如下两种情况:
- a.模块增加了 cfi 检查,但是个别函数不能进行检查意味着这个函数避免 cfi 检查,增加免检字段,如果有头文件,则函数声明的地方也要添加
- b.该模块增加了 cfi 检查,但是它依赖的其他模块没有进行 cfi 检查 于是,将它依赖的其他模块头文件目录列入免检清单