- 打开附件 demo 工程
futures-harmonyos-crash-demo - 配置鸿蒙签名,运行到 Mate 60 真机
- App 内选择 「复现」 模式
- 点击顶部 「快切 Tab(180s)」
- 约 3~4 分钟 App 闪退(无需额外操作)
- 发布:2026-06-30 16:56
- 更新:2026-10-19 11:35
- 阅读:1547
【报Bug】鸿蒙 vue3:极速 Tab + web-view 必现 libjsruntime SIGSEGV(附生产 napi_delete_reference 日志)
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: macOS 26.2 (Build 25C56)
HBuilderX类型: 正式
HBuilderX版本号: 5.08
手机系统: HarmonyOS NEXT
手机系统版本号: HarmonyOS 6.0.0
手机厂商: 华为
手机机型: HUAWEI Mate 60 Pro (ALN-AL80)
页面类型: vue
vue版本: vue3
打包方式: 离线
项目创建方式: HBuilderX
操作步骤:
预期结果:
App 持续运行,不崩溃。
App 持续运行,不崩溃。
实际结果:
进程 SIGSEGV,生成 cppcrash。
demo 崩溃特征(B 类,附件日志)
进程 SIGSEGV,生成 cppcrash。
demo 崩溃特征(B 类,附件日志)
bug描述:
问题概述
鸿蒙 uni-app vue3 应用在 快速切换 Tab + 频繁 navigateTo 详情(含 web-view) 后进程 SIGSEGV 退出。
我们提供了最小复现 demo,可稳定打出 libjsruntime.so / libv8_shared.so 栈;正式 App 另有 napi_delete_reference + ArkFinalizersPack::ProcessAll 日志。怀疑为 页面/web-view 销毁与 NAPI 引用释放竞态 的不同表现,请一并排查,勿仅按单条栈修复。
环境
- HBuilderX:5.08 正式版
- uni-app 编译器:5.07(vue3)
- 设备:HUAWEI Mate 60 Pro (ALN-AL80)
- 鸿蒙:6.1.0.117(SP6C00E115R10P9)
- demo 包名:com.future.hyqhjskh.hm
- 运行方式:HBuilderX 运行到真机(debug 包;release 亦建议官方验证)
复现步骤(demo,高概率)
- 解压附件
futures-harmonyos-crash-demo.zip,HBuilderX 打开 - 配置鸿蒙签名后运行到 Mate 60 真机
- 选择 「复现」 模式
- 点击 「极速 Tab(180s)」
- 约 1~4 分钟 App 闪退(可选手动猛点底部 Tab)
生产环境关联(未在 demo 稳定复现的 A 类)
正式期货 App(包名 com.future.hmslzq)用户反馈:快速切换底部 Tab 约 1~2 分钟闪退。
附件日志 cppcrash-com.future.hmslzq-...162246572.log 特征:
使用 demo 工程进行测试:
HBuilderX 版本:5.08.2026050815-alpha
鸿蒙手机:Huawei Mate 60 Pro
测试表现:
- 点击「快切 Tab(180s)」,页面快速切换,前 1 分钟基本正常。
- 约 1 分钟开始,出现明显卡顿,卡一段时间,然后连续切换几次页面。
- 卡顿的时间越来越长,到 180s 的时候已经非常严重,结束的弹框提示“快切结束,请再等 1~2 分钟”晚了 1 分钟多才出现。
- 再等至少 3 分钟,不一定会出现崩溃。多次测试运行,只有一次出现崩溃。
- 在代码中看到,每次从详情页面退出后都会故意泄漏里面的 webview,并持续向其泵送数据,如果停掉这个泵送,就不会出现明显的卡顿现象,且未再观察到崩溃现象。
根据唯一抓到的一次崩溃日志,排查到一处空指针解引用的潜在风险,可能会在创建对象过程中出现“半失败”的场景出问题,也符合内存泄漏过载的故障场景。
由于未能稳定复现崩溃现象,暂时无法确认此修复有效,不过此修复肯定是正向的,可以提交,下次发版会带上。
1***@qq.com (作者)
@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_uniCloud_WYQ @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_uniCloud_WYQ @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
1***@qq.com (作者)
@DCloud_App_Array @DCloud_uniCloud_WYQ @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下
【报Bug】鸿蒙 vue3:快速进出详情页后必现 libjsruntime SIGSEGV,全量日志指向 NAPI finalizer 双释放(ArkFinalizersPack::ProcessAll + napi_delete_reference)
一、环境
| 项 | 值 |
|---|---|
| HBuilderX | 5.26.2026091802 |
| uni-app 类型 | vue3(App,非 uni-app x) |
| 运行时 har | @dcloudio/uni-app-runtime = 5.2.52026081801 |
| 崩溃库 | libjsruntime.so(来自上述 har,/data/storage/el1/bundle/libs/arm64/libjsruntime.so) |
| App 版本 | 2.0.17 / versionCode 108 与 109 均可复现 |
| 打包类型 | debug 与 release 均复现(ReleaseType:debug 多次,ReleaseType:release 一次) |
| 设备 | nova 16,EMA-AL10 7.0.0.109(SP6C00E105R4P3) |
| 工程 SDK | compatibleSdkVersion / targetSdkVersion = 5.0.1(13) |
| bundle | com.vs.health.hos(另有旧包名 com.vs.health.hos1 同签名) |
二、现象
App 在鸿蒙真机上会无规律闪退,近 5 天本机留存 14 份 cppcrash 记录,全部为同一签名(同一崩溃函数、同一偏移),与业务操作无固定关系,但与"短时间内频繁进出页面"高度相关。崩溃时进程多数处于前台(抽查 5 份记录:4 份 Foreground:Yes、1 份
Foreground:No,即也存在后台崩溃)。
崩溃现场(每次都是这一组帧,只有 fault address 随机变化):
Reason: Signal:SIGSEGV(SEGV_MAPERR)@0x0000000000000001 probably caused by NULL pointer dereference
LastFatalMessage: [NAPI] Crash occurred on ProcessAll, callback: <addr>
Fault thread info:
Tid:<主线程>, Name:m.vs.health.hos
#00 napi_delete_reference+40 /system/lib64/platformsdk/libace_napi.z.so
#01 libjsruntime.so(0x638dc) ← DCloud 运行时
#02 ArkFinalizersPack::ProcessAll() const+108 libace_napi.z.so
#03 ArkNativeEngine::RunCallbacks(ArkFinalizersPack*)+104 libace_napi.z.so
#04 ArkNativeEngine::PostFinalizeTasks()::$_8::__invoke+24 libace_napi.z.so
#05 uv__queue_done+232 libuv.so
#06 OHOSJsEnvironmentImpl::PostTaskToHandler(...)::$_0 libruntime.z.so
#07 EventRunnerImpl::Run() / EventRunner::Run() libeventhandler.z.so
#08 MainThread::Start() libappkit_native.z.so
(以下为 appspawn 正常启动栈)
即:GC 顺带执行的 NAPI finalizer 队列中,libjsruntime.so 注册的那个 finalizer 对一个已失效的引用再次调用 napi_delete_reference,触发非法访存。
三、复现步骤(本机可 1~3 分钟内必现)
-
安装并启动 App(鸿蒙真机,debug 或 release 包均可)。
-
从首页快速「进入详情页 → 返回首页」,连续来回 8~10 次,越快越容易命中;进出的页面中包含 web-view / 图表(ECharts)页面。
-
停止操作后 10~60 秒内进程 SIGSEGV。
最近一次复现(15:37:59 崩溃)的页面栈轨迹:
15:36:38.723 Page:1 15:37:05.477 Page:4 15:37:13.077 Page:1
15:36:53.724 Page:3 15:37:07.733 Page:1 15:37:19.747 Page:6
15:37:00.023 Page:1 15:37:11.478 Page:5 15:37:20.628 Page:1
15:37:21.544 Page:7
→ 15:37:59.207 SIGSEGV43 秒内 9 次页面进出,进程 Rss 从 361 MB 涨到 459 MB。同一进程(pid 20310)此前还经历过一次同样的崩溃重启,两次崩溃间隔 11 分钟。
四、触发 GC 的调用栈(说明这不是我们的业务代码)
触发者 A:ArkWeb
runJavaScript回调(15:37:59)05 PromiseCapabilityRef::Resolve libark_jsruntime.so
06 napi_resolve_deferred+140 libace_napi.z.so
07 WebviewJavaScriptExecuteCallback::UvAfterWorkCb+2020 libwebview_napi.z.so ← webview executeJavaScript 回调
08 uv__queue_done → 主线程事件循环
(再往下进入 InterpreterAssembly::Execute → Heap::CollectGarbage → PostFinalizeTasks → 崩溃)
触发者 B:uni-network 流式请求收尾(15:26:49)
libhttp.z.so AsyncWorkRequestInStreamCallback
→ napi_call_function
→ @dcloudio/uni-app-modules uni-network/utssdk/app-harmony/index.ets:853 (mp.off('beforeClose', destroy))
→ @dcloudio/uni-mp-sdk sdk.js:1830 / sdk.js:70
→ RuntimeStubs::UpdateHotnessCounter → CheckSafepoint → CollectGarbage → 崩溃触发者 C:插件桥 + ArkWeb(10-13 19:52:06)
libwebview_napi.z.so
→ @dcloudio/uni-mp-sdk sdk.js:2958 (invokeSync)
→ @dcloudio/uni-mp-sdk sdk.js:1836 (emit)
→ napi_call_function → CollectGarbage → 崩溃三种触发者路径不同,但崩溃点完全一致,说明问题在 finalizer 本身,触发者只是"恰好在那时执行 JS 并引发 GC"。
五、14 次崩溃记录摘要
# 时间 bundle versionCode ReleaseType 进程存活 崩溃地址 1 10-10 19:20 hos1 108 release 143 s 0x2400000105037248 2 10-10 20:43 hos1 108 debug 347 s 0x736b 3 10-11 23:29 hos1 108 debug 172 s 0x006e6163735f6369(ASCII "ice_sca",把字符串当指针)4 10-12 19:30 hos 108 debug 378 s 0x1 5 10-12 20:12 hos 108 debug 1978 s 0x4 6 10-12 20:45 hos 108 debug 1963 s SIGTRAP, This is an unexpected memory usage behavior. may double free← 系统自己判定的双重释放7 10-13 06:34 hos 108 debug 35076 s 0x3 8 10-13 06:56 hos 108 debug 144 s 0x1 9 10-13 17:00 hos 109 debug 4061 s 0x4 10 10-13 17:21 hos 109 debug 961 s 0x1 11 10-13 19:52 hos 109 debug 3679 s 0x736b 12 10-14 08:20 hos 109 debug 44880 s 0xffffffe871000108 13 10-14 15:26 hos 109 debug 25609 s 0x1 14 10-14 15:37 hos 109 debug 670 s 0x1 崩溃地址每次都是随机垃圾值(含把 ASCII 字符串当指针读的值),14 份的
LastFatalMessage全部为[NAPI] Crash occurred on ProcessAll,其中一份被系统标注may double free—— 指向 use-after-free / 重复释放 NAPI 引用。六、诉求
-
官方此前在同类帖子中回复"疑似页面 / web-view 销毁与 NAPI 引用释放的竞态,已定位一处空指针风险并提交修复但未稳定复现"——请问该修复是否已进入正式版?对应哪个 HBuilderX / uni-app-runtime 版本?
-
我们这边可以稳定复现(1~3 分钟内),需要的话可提供完整 faultlog(
hidumper -s 1201 -a '-p Faultlogger -f <文件名>'输出)、hdc 抓取的完整 hilog,以及最小复现工程。 -
如果
napi_threadsafe_function/ weak reference 的释放时机可以加保护(例如 finalizer 中判空并跳过已失效引用),请求在运行时侧加一道兜底,避免直接段错误。
【报Bug】鸿蒙 vue3:快速进出含 web-view 页面后必现 libjsruntime SIGSEGV,全量日志指向 NAPI finalizer 双释放(ArkFinalizersPack::ProcessAll + napi_delete_reference)
一、环境
项 值
HBuilderX 5.26/5.32.2026101609-alpha
uni-app 类型 vue3
运行时依赖 @dcloudio/uni-app-runtime → ./libs/UniAppRuntime.har
崩溃库 libjsruntime.so(/data/storage/el1/bundle/libs/arm64/libjsruntime.so,build-id 57311a36f57d40809ca82cc5027104a941920488)
App 版本 1,0,0 / versionCode 100
打包类型 release(ReleaseType:release)
设备 HUAWEI Mate 70,CLS-AL00 6.1.0.135(SP8C00E120R7P8)
bundle com.hm.tangzhoudj
另:同工程更早还有 debug 包在 Pura X Max 上的同类闪退.
二、现象
鸿蒙真机前台运行中闪退,生成 CppCrash。
崩溃现场(主因栈):
Reason: Signal:SIGSEGV(SEGV_MAPERR)@0x0061656c43203337
LastFatalMessage: [NAPI] Crash occured on ProcessAll, callback: 389012404168
Fault thread:
00 napi_delete_reference+24 libace_napi.z.so
01 libjsruntime.so(+0x6393c) ← DCloud 运行时
02 ArkFinalizersPack::ProcessAll() const+108 libace_napi.z.so
03 ArkNativeEngine::RunCallbacks(...)
04 ArkNativeEngine::PostFinalizeTasks()::$_8::__invoke
05 uv__queue_done
06 OHOSJsEnvironmentImpl::PostTaskToHandler
07 EventRunnerImpl::Run / MainThread::Start
Submitter(触发 GC 的调用栈):
02 InvokeWeakNodeNativeFinalizeCallback
03 Heap::CollectGarbage
04 JSFunction::Call
05 PromiseCapabilityRef::Resolve
06 napi_resolve_deferred
07 WebviewJavaScriptExecuteCallback::UvAfterWorkCb ← ArkWeb runJavaScript 回调
08 uv__queue_done → 主线程事件循环
即:ArkWeb runJavaScript 回调返回时顺带触发 GC,NAPI finalizer 队列里 libjsruntime.so 对已失效引用再次 napi_delete_reference,非法访存。坏地址 0x0061656c43203337 为随机垃圾值(非正常指针),符合 UAF / 双释放特征。
崩溃前 hilog 可见多路 ArkWeb 并存与切换(如 nweb_id = 6 / 31 / ...),伴随 focus/blur、window show/hide。
三、复现步骤
安装并启动 App(鸿蒙真机,release 包)。
从首页反复「进入含 web-view 的详情页(活动 H5 / 内置浏览器页等)→ 返回首页」,连续来回多次,越快越容易命中。
停止操作后短时间内进程 SIGSEGV。
本份日志页面栈(崩溃前约 2 分钟内多次首页↔高序号页):
04:56:19 Page:137
04:56:43 Page:135
04:57:07 Page:1
04:57:10 Page:138
04:57:33 Page:1
04:57:40 Page:139
04:57:58 Page:1
04:58:01 Page:140
04:58:18 Page:1
04:58:35 Page:141
→ 04:58:37.633 SIGSEGV
进程已存活约 6388s,崩溃时 Rss 约 811 MB(811233 kB)。
四、业务侧已做缓解(仍可复现)
跳转节流 / 返回冷却(hm-nav)
离开页面前拆掉 web-view
鸿蒙尽量只保留单个内置 web 页
可降频,但挡不住运行时侧 finalizer UAF。
五、诉求
请官方确认:该修复是否已进入正式版?对应哪个 HBuilderX / uni-app-runtime(或 UniAppRuntime.har)版本?
ohpm 上已见 5.32.2026101601;我们当前为本地 ./libs/UniAppRuntime.har。请说明 HBuilderX 升到哪一版后会带上含修复的 har。
1***@qq.com (作者)
请问napi gc这个有办法修复么还是说这次能优化?场景就是我们自定义的组件tabbar,切换重新渲染的的时候,tab切换使用时间一久,可能就崩溃了。
2026-07-10 21:07
DCloud_云服务_MAQ
回复 1***@qq.com: 这次并没有专门排查内存泄漏的问题,如果像 demo 工程这种由于业务代码导致的“泄漏”,运行时肯定是没办法的。
2026-07-11 09:26
1***@qq.com (作者)
回复 DCloud_云服务_MAQ: 好的,感谢
2026-07-13 15:48
1***@qq.com (作者)
回复 DCloud_云服务_MAQ: 大佬我在hbuilderx5.15,uniapp vue3,鸿蒙上发现一个有点严重的问题,就是如果app闪退了,再次打开好像就不能打开了,会一直崩溃.日志好像是appid找不到了,重新安装才可能正常用。
2026-07-21 14:15