如何排查循环引用的问题

jscrash报错:XXX is not initialized,大概率是应用代码中存在循环引用。

如何排查循环引用的问题-鸿蒙开发者社区

如何排查循环引用的问题-鸿蒙开发者社区

HarmonyOS
2024-09-18 12:27:18
1642浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
put_get

应用可使用ArkTools.checkCircularImport工具进行排查。

工具说明:ArkTools.checkCircularImport(string: OhmUrl,bool ?: flag);

入参一OhmUrl:出现crash报错时,报错栈上会有当前的报错内容所在文件。

入参二flag:(可选参数)开发者如果需要检查代码其它地方是否存在潜在的依赖,则可以输入1,如果不需要则无需输入。

例如:

此时我们需要找到entry/src/main/ets/pages/D.ts 对应编译产物中对应的OhmUrl。

编译产物路径(如果是hap/feature/hsp就是在本模块下编译产物中查找,如果是har包或者三方包就在加载它的hap/feature/hsp下编译产物中查找):

build/default/cache/default/default@CompileArkTS/esmodule/debug/filesInfo.txt。

找到filesInfo.txt文件,搜索报错文件名( 例:ets/pages/D ) , 截取图中esm的分号前,.ts分号后的部分。

开发者可以检查名字是不是bundleName/moduleName/xxx/xxx的形式,路径是不是报错的那个文件。确认无误,该参数就是需要的入参。

工具使用:

该工具是在运行时检测的工具,所以开发者需将代码设计成能走入运行时。

1. 创建一个ts文件(只能是ts文件),并写入代码:

// @ts-ignore 
ArkTools.checkCircularImport('bundleName/moduleName/xxx/xxx'); 
export let ss =100; 
console.log("checkCircularImport")
  • 1.
  • 2.
  • 3.
  • 4.

2. 在报错文件的最上层import该ts文件。

3. 编译运行,过滤关键字checkCircularImport, 复现crash操作 ,即可看到报错循环引用环。

如果解了后发生了新的未初始化报错,则要对应替换入参1和import位置,即要重复所有步骤。

分享
微博
QQ
微信
回复
2024-09-18 17:55:41


相关问题
ArkTs解决循环引用方式
3126浏览 • 1回复 待解决
HarmonyOS 华为推送问题排查步骤
1323浏览 • 1回复 待解决
HarmonyOS Swiper循环问题
1035浏览 • 1回复 待解决
HarmonyOS 线程通信 事件循环问题
811浏览 • 1回复 待解决
HarmonyOS包引用问题
659浏览 • 1回复 待解决
HarmonyOS 模块引用问题
808浏览 • 1回复 待解决
HarmonyOS资源引用问题
1214浏览 • 1回复 待解决
HarmonyOS引用flutter问题
911浏览 • 1回复 待解决
Axios与Log循环依赖问题
923浏览 • 1回复 待解决
har 包引用报错问题
1312浏览 • 1回复 待解决
HarmonyOS HAP引用HSP问题
747浏览 • 1回复 待解决
HarmonyOS @builder引用传递问题
1319浏览 • 0回复 待解决
HarmonyOS 动态库引用问题
972浏览 • 1回复 待解决
flutter_sound 插件引用问题
1557浏览 • 1回复 待解决
HarmonyOS har包引用so问题
1352浏览 • 1回复 待解决