Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

每次代码热更新报错 #10

Open
superYaoser opened this issue Nov 19, 2024 · 9 comments
Open

每次代码热更新报错 #10

superYaoser opened this issue Nov 19, 2024 · 9 comments

Comments

@superYaoser
Copy link

使用这个库后 每次代码热更新会报错:
Reason:Signal:SIGABRT(SI_TKILL)@0x01317bc9000045c0 from:17856:20020169
LastFatalMessage:[gc] AllocateBuffer:629 size must have a size bigger than 0
想看一下详细工程级的build-profile.json5文件,是不是和我的配置有关

@YoloMao
Copy link
Collaborator

YoloMao commented Nov 20, 2024

您好,麻烦贴一下更多相关的日志,以供排查

另外,仓库中有 build-profile.json5 示例:https://github.com/growingio/growingio-sdk-harmonyos/blob/master/build-profile.json5

@superYaoser
Copy link
Author

superYaoser commented Nov 20, 2024

https://github.com/growingio/growingio-sdk-harmonyos/blob/master/build-profile.json5 这个案例中:
{
"name": "GrowingAnalytics",
"srcPath": "./GrowingAnalytics",
},
{
"name": "GrowingToolsKit",
"srcPath": "./GrowingToolsKit",
}
如何配置呢?
日志如下:

cppcrash-com.yao.hm-20241119195913.txt

@YoloMao
Copy link
Collaborator

YoloMao commented Nov 20, 2024

https://github.com/growingio/growingio-sdk-harmonyos/blob/master/build-profile.json5 这个案例中:
{
"name": "GrowingAnalytics",
"srcPath": "./GrowingAnalytics",
},
{
"name": "GrowingToolsKit",
"srcPath": "./GrowingToolsKit",
}
如何配置呢?

这是由于此 repo 中的工程包括集成示例 entry 模块、SDK 模块、SDK toolsKit 模块,共 3 个模块,因此这部分配置可以忽略

日志如下:
cppcrash-com.yao.hm-20241119195913.txt

日志中除了:

11-19 19:59:13.779 17856 17856 I C03F00/com.yao.hm/ArkCompiler: [ecmascript] Load patch, patch: /data/storage/el1/bundle/hotreload_2000011/entry.hqf/ets/modules.abc, base:/data/storage/el1/bundle/entry/ets/modules.abc
11-19 19:59:13.779 17856 17856 F C03F00/com.yao.hm/ArkCompiler: [gc] AllocateBuffer:629 size must have a size bigger than 0

无法得到更多有效信息来直接判断与 SDK 相关

可以从以下思路排查:

  • 热重载仅包括 UI 界面更新代码,是否出现报错
  • 热重载仅包括 GrowingIO SDK 埋点代码,是否出现报错
  • 热重载同时包括 UI 界面更新代码和 GrowingIO SDK 埋点代码,是否出现报错
  • 创建一个 hello world 项目,以上步骤再次尝试,是否出现报错

@superYaoser
Copy link
Author

  • 排查后,我在项目中移除 growingio/analytics 这个库就能正常热重载,如果不移除,当我跳转n次页面后修改当前页面的ui任意代码 就会报这个错,移除库后不会报错。
  • 我并没有使用growingio/analytics,安装后就出现了上述的问题
  • 在新建的 hello world 项目 安装 growingio/analytics 这个库 能正常热重载

项目代码的包

{
  "modelVersion": "5.0.0",
  "description": "Please describe the basic information.",
  "dependencies": {
    "@ohos/axios": "^2.2.2",
    "@xinyansoft/oh-crop": "^1.0.3",
    "@growingio/analytics": "^2.0.1"
  },
  "devDependencies": {
    "@ohos/hypium": "1.0.18",
    "@ohos/hamock": "1.0.0"
  },
  "dynamicDependencies": {}
}

项目代码的工程配置

{
  "app": {
    "signingConfigs": [
// 演示忽略
    ],
    "products": [
      {
        "name": "default",
        "signingConfig": "default",
        "compatibleSdkVersion": "5.0.0(12)",
        "runtimeOS": "HarmonyOS",
        "buildOption": {
          "strictMode": {
            "useNormalizedOHMUrl": true,
          }
        }
      }
    ],
    "buildModeSet": [
      {
        "name": "debug",
      },
      {
        "name": "release"
      }
    ]
  },
  "modules": [
    {
      "name": "entry",
      "srcPath": "./entry",
      "targets": [
        {
          "name": "default",
          "applyToProducts": [
            "default"
          ]
        }
      ]
    }
  ]
}

@YoloMao
Copy link
Collaborator

YoloMao commented Nov 20, 2024

  • 排查后,我在项目中移除 growingio/analytics 这个库就能正常热重载,如果不移除,当我跳转n次页面后修改当前页面的ui任意代码 就会报这个错,移除库后不会报错。
  • 我并没有使用growingio/analytics,安装后就出现了上述的问题
  • 在新建的 hello world 项目 安装 growingio/analytics 这个库 能正常热重载

根据以上描述,大概率跟 growingio/analytics 无关
我尝试使用本 repo 中的 entry 模块也无法复现

建议按 使用约束 中的内容进行排查。在未得到有效结果后,再向官方提 issue

@superYaoser
Copy link
Author

补充一下,v1.1.0 这个版本不会出现这个问题

@YoloMao
Copy link
Collaborator

YoloMao commented Nov 20, 2024

补充一下,v1.1.0 这个版本不会出现这个问题

可以怀疑与字节码 Har 有关,1.1.0 与 2.x.x 在编译上的主要差异在此 (2.0.0 起,SDK 中的 build-profile.json5,更新了 buildOptions.arkOptions.byteCodeHar 为 true,因此才需要您在工程级的 build-profile.json5 配置 useNormalizedOHMUrl 为 true)

经测试,可能是由于运行编译时,【意外地】将字节码 Har 依赖的源码 Har 合入最终 modules.abc 产物,导致热重载的过程中,定位 Class 偏移量错误,导致崩溃。

在本案例中,字节码 Har 为 growingio/analytics,依赖的源码 Har 为 snappyjs
具体的测试结果如下 (以下描述中,热重载 modules.abc 指 entry.hqf/ets/modules.abc,最终产物 modules.abc 指运行编译产物 entry/ets/modules.abc):

首先,无论是否集成 growingio/analytics,同一套 UI 代码生成的热重载 modules.abc 文件都一样

image

未集成 growingio/analytics

最终 modules.abc 仅包含 entry 模块 class,class_def 为 12
image

集成 growingio/analytics 2.0.1(未使用)

最终 modules.abc 【意外地】包含 snappyjs 内的 class,class_def 为 15
image

集成 growingio/analytics 1.1.0(未使用)

最终 modules.abc 仅包含 entry 模块 class,class_def 为 12
image

集成并使用 growingio/analytics 2.0.1

最终 modules.abc 包含 growingio/analytics + snappyjs 内的 class,class_def 为 54
image

@YoloMao
Copy link
Collaborator

YoloMao commented Nov 20, 2024

可得出的结论:

  • 编译运行时,会额外加载字节码 Har 依赖的 Har 到最终产物 modules.abc (当前测试环境: DevEco Studio 5.0.3.906)
  • 热重载时,最终产物 modules.abc 额外加载的字节码 Har 依赖的 Har,可能会造成定位 UI 更新的 Class 偏移量异常

那么,直接使用 growingio/analytics 相关功能,可能就不会有此 issue 反馈的问题了。
因为我这边无法复现该问题,@superYaoser 麻烦在您的项目中试试看

@superYaoser
Copy link
Author

谢谢您的耐心回复,我试试使用后会不会有这个issue,可能这次验证等待时间会长一些,我会记得回复的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants