PC 微信小程序体验版开启调试模式后白屏,报 pageId/webviewId 生命周期错误的排查记录

# PC 微信小程序体验版开启调试模式后白屏,报 pageId/webviewId 生命周期错误的排查记录

  ## 一、问题背景

  最近在测试微信小程序体验版时,发现一个比较奇怪的问题:

  同一个小程序,在手机微信体验版中运行正常,在微信开发者工具中运行正常,PC 微信不开启调试模式时页面也能正常展示。

  但是,只要在 PC 微信中开启调试模式,小程序登录后跳转页面时就会白屏,并出现微信框架内部错误。

  一开始怀疑是最近代码改动导致的问题,但后面拿一个 6 月 9 日发布、期间一直没有改动的历史项目版本测试,发现同样会在 PC 微
  信开启调试模式后报一样的错误。因此基本可以排除本次业务代码改动导致的问题。

  ## 二、复现环境

  ```text
  系统:Windows 11 10.0.22621
  PC 微信版本:4.1.10.53、4.1.11.24
  小程序类型:体验版
  运行环境:PC 微信小程序
  是否开启调试:开启调试后复现

  其他环境表现:

  手机微信体验版:正常
  微信开发者工具:正常
  PC 微信关闭调试模式:页面正常
  PC 微信开启调试模式:页面白屏并报错

  ## 三、问题现象

  登录页初始展示正常。

  问题主要发生在以下场景:

  1. 登录后跳转角色选择页
  2. 登录后直接进入首页
  3. 游客模式进入首页
  4. 进入异常页面后再返回登录页,登录页也可能白屏

  报错大致如下:

  SystemError (appServiceSDKScriptError)
  LifeCycle.load fail: Cannot set a non-pending waiting value

  SystemError (jsEnginScriptError)
  Framework inner error: adapter page with pageId 101 not exists during creation

  SystemError (jsEnginScriptError)
  Cannot read properties of undefined (reading 'getCurrentRoutePath')

  routeDone with a webviewId 101 is not found

  SystemError (appServiceSDKScriptError)
  "[Page route 错误(system error)] routeDone with a webviewId 101 is not found"

  同时控制台还可能出现:

  wx.getSystemInfoSync is deprecated.
  [Event] 21 listeners of event WindowInfoChanged have been added, possibly causing memory leak.
  unsupported property: font-size: undefinedpx;

  ## 四、排查过程

  ### 1. 排查是否为接口问题

  因为项目接口当时使用的是 HTTP,在 PC 微信中不开启调试模式时,请求会被拦截。

  一开始怀疑是否是 HTTP 请求导致页面异常。

  但后续发现:

  PC 微信关闭调试模式:请求被拦截,但页面能正常展示
  PC 微信开启调试模式:请求能发出,但页面白屏

  所以重点不是 HTTP 请求本身,而是开启调试模式后触发了页面白屏。

  HTTP 只是让我们必须开启调试模式才能请求接口,从而暴露了这个问题。

  ### 2. 排查是否为新版本代码问题

  为了确认是不是最近发版引入的问题,又测试了一个 6 月 9 日发布的历史项目版本。

  这个历史版本中间一直没有改动,之前也能正常使用。

  但现在在同一台电脑的 PC 微信中,只要开启调试模式,也会出现相同错误。

  因此基本可以排除“本次业务代码改动导致”的可能。

  ### 3. 对比不同运行环境

  对比结果如下:

  手机微信体验版:正常
  微信开发者工具:正常
  PC 微信关闭调试模式:页面正常
  PC 微信开启调试模式:白屏报错
  历史未改代码版本:PC 微信开启调试模式同样报错

  这个对比结果比较关键。

  如果是业务代码问题,理论上手机微信、开发者工具、PC 微信关闭调试模式也应该更容易复现。

  但现在问题只集中在 PC 微信开启调试模式这个场景。

  ### 4. 加日志确认崩溃位置

  为了定位具体卡在哪一步,临时在登录流程和页面跳转流程中加入日志。

  关键日志类似:

  登录接口成功
  登录后没有默认角色,准备进角色选择页
  延迟 reLaunch 已安排
  延迟 reLaunch 开始执行
  reLaunch 成功
  reLaunch 结束

  然后页面白屏,并出现微信内部错误。

  关键点是:

  跳转 API 的 success / complete 已经执行
  但目标页面的生命周期日志没有出现

  也就是说,业务代码已经发起页面跳转,微信也回调了成功。

  但目标页面还没有真正进入业务生命周期,就在微信内部页面创建阶段崩了。

  这和报错中的信息是吻合的:

  adapter page with pageId xxx not exists during creation
  routeDone with a webviewId xxx is not found
  getCurrentRoutePath undefined

  这些都更像是微信内部页面容器、webviewId、pageId 生命周期状态异常。

  ## 五、尝试过的处理方式

  排查过程中尝试过以下方式,但没有从根本上解决:

  1. 回退基础库版本
  2. 关闭 useMultiFrameRuntime
  3. 关闭 custom-tab-bar
  4. 将 tab 页面临时改成静态页面
  5. 关闭 sourceMap 上传
  6. 暂时禁用 App.vue 的全局页面守卫
  7. 调整登录后跳转时机
  8. 增加跳转延迟

  这些操作均无法解释“历史未改代码版本也同样复现”的现象。

  因此最终判断,该问题更可能是 PC 微信小程序调试运行时的问题。

  ## 六、最终判断

  目前倾向于认为:

  该问题不是业务代码直接导致,而是 PC 微信小程序体验版在开启调试模式后,页面跳转 / 页面创建阶段存在运行时异常。

  判断依据:

  1. 手机微信体验版正常。
  2. 微信开发者工具正常。
  3. PC 微信关闭调试模式页面正常。
  4. PC 微信开启调试模式后白屏。
  5. 历史未改代码版本也可复现。
  6. 报错堆栈来自微信内部框架,不是业务代码堆栈。
  7. 页面跳转 API 已回调 success / complete,但目标页面生命周期未执行。

  ## 七、临时规避方案

  目前比较现实的规避方案是:

  1. 尽快将接口切换为 HTTPS。
  2. PC 微信测试时尽量关闭调试模式。
  3. 需要调试时优先使用微信开发者工具或手机真机调试。
  4. 将问题反馈到微信开放社区,等待 PC 微信后续版本修复。

  如果业务必须在 PC 微信体验版中开启调试模式进行测试,则目前只能记录错误信息并反馈官方。

  ## 八、总结

  这次问题的迷惑点在于,它看起来像是登录后页面跳转导致的白屏,但通过环境对比和历史版本验证,最终发现问题只和 PC 微信开启
  调试模式强相关。

  尤其是历史未改代码版本也能复现,这一点基本排除了新代码引入问题。

  最终结论:

  PC 微信小程序体验版开启调试模式后,可能存在页面生命周期 / webviewId / pageId 管理异常,导致页面跳转后白屏。

  建议遇到类似问题时,不要只盯着业务代码排查,可以优先做以下对比:

  1. 手机微信是否正常
  2. 微信开发者工具是否正常
  3. PC 微信关闭调试模式是否正常
  4. 历史稳定版本是否也复现
  5. 控制台报错是否来自微信内部框架

  如果以上条件都满足,大概率就不是业务代码本身的问题。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值