崩溃现象: 应用在正常使用过程中偶发闪退,进程直接崩溃,无 JS 层异常捕获。崩溃类型均为 SIGSEGV(SEGV_MAPERR),访问无效内存地址,地址特征为 0x006b... 开头的损坏指针。
崩溃场景一(v4.2.0,启动后 34 秒):
崩溃前 3 秒出现 JS 错误:
Native 调用栈:
#00 Builtins_JumpIfToBooleanFalseHandler
#08 v8::Object::SetProperty
#10 Runtime_SetKeyedProperty
#12 Builtins_KeyedStoreIC_Megamorphic
#16 Builtins_ProxySetProperty
#26 OH_JSVM_CallFunction
崩溃场景二(v4.2.2,启动后约 5 分钟):
无明显 JS 错误,崩溃发生在 webview 触摸交互 + 键盘收起后的微任务回调中。
Native 调用栈:
#00 Builtins_ArrayIsArray
#07 Builtins_PromiseConstructor
#14 Builtins_AsyncFunctionAwaitResolveClosure
#15 Builtins_PromiseFulfillReactionJob
#16 Builtins_RunMicrotasks
#24 v8::Function::Call
#25 OH_JSVM_CallFunction
共同特征:
- 崩溃均发生在 V8 引擎内部,操作对象指针已被破坏
- 调用栈末端均为 OH_JSVM_CallFunction ,由 libjsruntime.so 驱动
- 崩溃时内存充足(RSS 约 400-470MB,可用约 5GB),排除 OOM
- 均在页面切换或 webview 交互过程中触发
- 页面均为 /ets/uni-mp-sdk/Page
分析: 两次崩溃均表现为 V8 引擎层对已损坏/已回收的 JS 对象进行操作( SetProperty 、 ArrayIsArray ),而非应用层 JS 代码逻辑错误。崩溃发生在微任务回调或 Proxy 属性设置路径中,推测与 Vue 响应式系统(Proxy)或 Pinia 状态管理在鸿蒙 WebView 环境下的内存管理有关,可能是页面切换或异步操作完成后对象被提前回收导致的 use-after-free。
完整崩溃日志见附件