某一 uni 小程序"进入→关闭"必崩,其他小程序不崩。崩溃线程 com.taobao.weex.bridge,EXC_BAD_ACCESS (code=1, address=0x68b77be81b53c8)。wifi下不崩,用流量崩
- 发布:29 分钟前
- 更新:29 分钟前
- 阅读:27
产品分类: uni小程序SDK
手机系统: iOS
手机系统版本号: iOS 26
手机厂商: 苹果
手机机型: iphone17
页面类型: vue
SDK版本号: 4.75
操作步骤:
预期结果:
小程序正常开启关闭
小程序正常开启关闭
实际结果:
app崩溃
app崩溃
bug描述:
崩溃栈:
code
0 objc_msgSend
1 -[PDRCoreFeature Execute:]
2 -[PDRCoreApp handleCmds:]
3 -[PDRCoreAppFrame webViewEngine…]
4 -[H5WeexWebview handleMessage:withObject:]
6 -[WXSDKInstance(DCPlusBridge) …]
7 -[PlusWeexModule execSync:]
10 -[WXModuleMethod invoke]
寄存器(frame 0):x0 = x22 = 0x146aa1480(getCommandInstance 返回的插件实例,已悬垂),x1 = "resultWithInt:"(PGPlugin 方法)。
反汇编证据:-[PDRCoreFeature obj:Execute:] 以尾调用 b objc_msgSend 派发插件方法;插件方法(如 -[PGNavigator getStatusbarHeight:]、-[PGNStorage JSNStorage_getLength:] 等)尾调用 resultWithInt:,两层尾调用折叠栈帧,与崩溃栈形态完全吻合。即 Execute:(PDRCoreFeature.m:770 附近)从命令表取到的 PGPlugin 指针已被释放。
同根因历史形态:插件内存被 Foundation 复用时报 -[NSThreadPerformInfo resultWithString:]: unrecognized selector。
根因分析:小程序销毁流程 dealloc 插件实例时,未等待/排空 weex.bridge 队列上存量 execSync 调用;PDRCoreFrameJSObjects/PDRCoreGlobalJSObjects 命令表持裸指针,销毁后仍被取出派发。
诉求:① 销毁流程先 drain/join bridge 队列再释放插件,或命令表改弱引用/失效标记;② 确认哪个 SDK 版本已修复该时序,便于升级。宿主侧目前已用运行时守卫在 getCommandInstance: 层拦截悬垂指针止血,但闭源内部时序无法根治。
0 个回复