1***@qq.com
1***@qq.com
  • 发布:2026-06-30 16:56
  • 更新:2026-10-19 11:35
  • 阅读:1547

【报Bug】鸿蒙 vue3:极速 Tab + web-view 必现 libjsruntime SIGSEGV(附生产 napi_delete_reference 日志)

分类:uni-app

产品分类: 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

操作步骤:
  1. 打开附件 demo 工程 futures-harmonyos-crash-demo
  2. 配置鸿蒙签名,运行到 Mate 60 真机
  3. App 内选择 「复现」 模式
  4. 点击顶部 「快切 Tab(180s)」
  5. 约 3~4 分钟 App 闪退(无需额外操作)

预期结果:

App 持续运行,不崩溃。

实际结果:

进程 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,高概率)

  1. 解压附件 futures-harmonyos-crash-demo.zip,HBuilderX 打开
  2. 配置鸿蒙签名后运行到 Mate 60 真机
  3. 选择 「复现」 模式
  4. 点击 「极速 Tab(180s)」
  5. 约 1~4 分钟 App 闪退(可选手动猛点底部 Tab)

生产环境关联(未在 demo 稳定复现的 A 类)

正式期货 App(包名 com.future.hmslzq)用户反馈:快速切换底部 Tab 约 1~2 分钟闪退。
附件日志 cppcrash-com.future.hmslzq-...162246572.log 特征:

2026-06-30 16:56 负责人:无 分享
已邀请:
DCloud_云服务_MAQ

DCloud_云服务_MAQ

使用 demo 工程进行测试:
HBuilderX 版本:5.08.2026050815-alpha
鸿蒙手机:Huawei Mate 60 Pro
测试表现:

  1. 点击「快切 Tab(180s)」,页面快速切换,前 1 分钟基本正常。
  2. 约 1 分钟开始,出现明显卡顿,卡一段时间,然后连续切换几次页面。
  3. 卡顿的时间越来越长,到 180s 的时候已经非常严重,结束的弹框提示“快切结束,请再等 1~2 分钟”晚了 1 分钟多才出现。
  4. 再等至少 3 分钟,不一定会出现崩溃。多次测试运行,只有一次出现崩溃。
  5. 在代码中看到,每次从详情页面退出后都会故意泄漏里面的 webview,并持续向其泵送数据,如果停掉这个泵送,就不会出现明显的卡顿现象,且未再观察到崩溃现象。

根据唯一抓到的一次崩溃日志,排查到一处空指针解引用的潜在风险,可能会在创建对象过程中出现“半失败”的场景出问题,也符合内存泄漏过载的故障场景。

由于未能稳定复现崩溃现象,暂时无法确认此修复有效,不过此修复肯定是正向的,可以提交,下次发版会带上。

  • 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

1***@qq.com

1***@qq.com (作者)

是打包的hap运行,不是卓易通运行的apk。测试和生产都存在这个问题。

1***@qq.com

1***@qq.com (作者)

demo里面有很多日志,其中还有napi gc的崩溃。

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_UNI_Anne

1***@qq.com

1***@qq.com (作者)

@DCloud_heavensoft @DCloud_UNI_CHB @DCloud_UNI_Anne @DCloud_UNI_FengXY

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

hbuilderx5.14还是复现。

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_uniCloud_WYQ 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_uniCloud_WYQ @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_uniCloud_WYQ @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

1***@qq.com

1***@qq.com (作者)

@DCloud_App_Array @DCloud_uniCloud_WYQ @DCloud_heavensoft @DCloud_CHB @DCloud-HBuilderX团队 有大佬看到的话,麻烦反馈处理一下

l***@vitalsilicon.com

l***@vitalsilicon.com

【报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 分钟内必现)

  1. 安装并启动 App(鸿蒙真机,debug 或 release 包均可)。

  2. 从首页快速「进入详情页 → 返回首页」,连续来回 8~10 次,越快越容易命中;进出的页面中包含 web-view / 图表(ECharts)页面。

  3. 停止操作后 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 SIGSEGV

    43 秒内 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 引用。

    六、诉求

  4. 官方此前在同类帖子中回复"疑似页面 / web-view 销毁与 NAPI 引用释放的竞态,已定位一处空指针风险并提交修复但未稳定复现"——请问该修复是否已进入正式版?对应哪个 HBuilderX / uni-app-runtime 版本?

  5. 我们这边可以稳定复现(1~3 分钟内),需要的话可提供完整 faultlog(hidumper -s 1201 -a '-p Faultlogger -f <文件名>' 输出)、hdc 抓取的完整 hilog,以及最小复现工程。

  6. 如果 napi_threadsafe_function / weak reference 的释放时机可以加保护(例如 finalizer 中判空并跳过已失效引用),请求在运行时侧加一道兜底,避免直接段错误。

2***@qq.com

2***@qq.com

【报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。

要回复问题请先登录或注册