收到你的 bug 反馈。作为 DCloud 官方人员,我对这份反馈进行如下评审:
一、反馈内容完整性评审
整体来看,这是一份质量较高的 bug 反馈,关键信息基本齐备:
-
BUG 标题与描述:标题准确概括了核心要素(鸿蒙、Vue3、SIGSEGV in libv8_shared.so、~74 秒确定性崩溃、与应用定时器无关)。描述部分非常专业:
- 提供了 5 次崩溃的具体时间数据(73.5 / 74.4 / 74.7 / ~74 / 74 秒),“确定性崩溃”的结论有数据支撑;
- 排除了 OOM(Rss ~444MB,设备可用内存 2.7GB);
- 崩溃签名细节充分:坏指针高位
0x6b6b9bb5 五次一致、仅低位漂移,这类观察对判断内存释放后使用(use-after-free)类问题很有价值;
- 给出了崩溃线程、libjsruntime.so build-id 与 HBuilderX 5.26 SDK 逐位比对的结论,以及 JS 栈语义分析(
Builtins_ProxySetProperty → Runtime_SetKeyedProperty → JumpIfToBooleanFalseHandler);
- 排除性验证扎实:注释全部 1 秒定时器并解包 HAP 确认改动在包内、hilog 中 arkweb/cef 层
ExecuteJavaScriptExt 周期性观察,这些工作有效支持了“非业务代码问题”的判断。
-
代码示例:缺失。你描述“无需 web-view、无需特殊业务代码,普通列表页即可”,这对理解复现条件有帮助,但为了让官方人员拿到后无需调整即可直接编译验证,建议补充一个最简可复现工程(可脱敏)。
-
复现步骤:基本清晰(新建/任意 Vue3 工程 → 编译到鸿蒙真机 → 冷启动前台静置 → ~75 秒崩溃,复现率 100%,5/5 次)。配合“任意工程均可”的说法理论上可复现,但仍建议附上你实际使用的最简工程,消除环境差异带来的验证障碍。
-
预期结果:“前台静置保持稳定运行”是完全合理的预期。
-
实际结果:描述详细,包含崩溃签名、崩溃栈、内存状态及初步分析,不属于误报。
-
分类信息:基本完整(Mac 12.7.6、HBuilderX 5.26 正式版、HarmonyOS NEXT、Vue3、华为畅享 90 Plus JDY-AL50)。有一处需要确认:分类中“手机OS系统版本”填写的是 HarmonyOS 6.0.0,但设备机型处写的是 HarmonyOS 7.0.0.109,两者不一致,请确认设备实际系统版本,避免影响排查定位。
另外需要说明:我无法识别你提到的附件(5 份 cppcrash、2 段 hilog 录制),请将崩溃日志的关键内容(Reason、Fault thread info、Registers、Memory near registers、Maps 中 libv8_shared/libjsruntime 的映射段等,参考鸿蒙官方 Cpp Crash 日志规格)以文本形式直接补充在反馈正文中。
二、问题是否成立的分析
从知识库检索到的高度相似案例来看,这个问题大概率成立,且并非孤例:
-
ask 社区 220883:HBuilderX 5.15、nova 12 Ultra、HarmonyOS 6.0.0,偶发 SIGSEGV(SEGV_MAPERR),坏指针同样为 0x006b... 开头特征;崩溃栈同样是 Builtins_JumpIfToBooleanFalseHandler → v8::Object::SetProperty → Runtime_SetKeyedProperty → Builtins_ProxySetProperty → OH_JSVM_CallFunction,调用栈末端同为 OH_JSVM_CallFunction 由 libjsruntime.so 驱动,崩溃时内存充足(RSS 400-470MB)排除 OOM——与你反馈的特征几乎完全吻合。
-
ask 社区 220578:HBuilderX 5.08、Mate 60 Pro,鸿蒙 vue3 应用 SIGSEGV,可稳定打出 libjsruntime.so / libv8_shared.so 栈;该帖关联案例中记录了“寄存器值 0x6b6b 开头为典型的内存释放后填充模式(freed memory pattern),确认为 V8 内部 Proxy 对象的 use-after-free”,崩溃链路同样是 ProxySetProperty → JumpIfToBooleanFalseHandler。
你反馈中“坏指针高位 0x6b6b9bb5”的观察与上述案例中“0x6b6b 为 freed memory pattern”的分析一致,且崩溃栈形态、“非 OOM”、“V8 引擎层操作已损坏对象”等特征多重吻合,可以认为你反馈的问题与 220578、220883 属于同一类运行时/引擎层内存问题,而非你的业务代码问题。你在反馈中主动关联同源 case 的做法是正确的。
同时需要说明两点:
- 你在反馈中确认的使用方式(Vue3 项目编译到鸿蒙)在官方支持范围内(自 HBuilderX 4.27 起 uni-app 支持 HarmonyOS Next 平台,仅支持 Vue3 项目),可以排除“用法不支持”的因素;
- 上述 ask 社区帖子目前均无官方处理结论,你提到的“4.31+ 逻辑层迁 JSVM 后 libv8_shared 崩溃”的根因推断,目前没有官方确认的依据,只能作为排查线索;知识库中也暂未检索到针对该崩溃的官方解决方案或已修复版本记录,因此暂时无法给出确认有效的规避方案。
三、后续建议
- 建议通过 DCloud ISSUE 系统(https://issues.dcloud.net.cn/)正式提交此问题,并将 5 份 cppcrash 的完整关键字段与 hilog 关键片段以文本形式附上,便于引擎侧符号化排查;
- 补充最简可复现工程(脱敏后),确保“任意 Vue3 工程 + 前台静置 ~75 秒”的复现路径可被官方直接验证;
- 确认并补充设备准确系统版本(6.0.0 还是 7.0.0.109),以及是否在其他机型/系统版本上复现过;
- 欢迎加入 uni-app鸿蒙化技术交流群 咨询,群中有相关专业的管理员和群友。
评审结论:反馈有效、质量较高,问题大概率成立(与知识库中多个同类崩溃的特征高度吻合),属于鸿蒙运行时/引擎层问题而非业务代码问题;但缺少最简复现工程,且附件我无法识别,建议按上述方式补充关键信息后通过 ISSUE 系统正式提交,便于排期排查。