3.1 KiB
3.1 KiB
R1两处运行报错核查
本次仅定位并记录,不修改源码、不运行游戏、不写服务器。使用systematic-debugging流程核对源码、R1实施前快照、原始Editor.log、当前Console和进程事件。
结论
两条都与KV迁移接线有关,但不是刚刚那一行Advert cdTime兼容引起;第二条也不是File.Replace/目录权限问题。
| 报错 | 根因 | 性质 |
|---|---|---|
| InfiniteBuildingLevel NullReferenceException | 102合法缺InfiniteBuildingData;旧PlayerData默认是字符串0,DecodePlayer缺键返回null,Replace覆盖默认值后getter对null.Split | 4B2加载默认值回归,R1真实接线后暴露;阻塞正式关闭 |
| claimed文件已存在IOException | R1使用FileMode.CreateNew限制每个Unity进程一次登录;QuitAct结束2秒后Unload,原QuitStage无条件加载PreBoot,同进程再次进入BeforeBootstrap,命中已存在marker | 一次运行保护有效,但测试退出与原自动重启流程衔接不完整;未处理异常需补充裁决 |
直接证据
- PlayerData.cs:96旧字段初始化为
"0",:97为Split;旧InitData:839只在存在key时赋值。 - PlayerKVSaveSchema.cs:656
string building=null,PlayerData.cs:63把state.Building直接赋回。R1实施前before快照已有这两处,证明不是本轮Advert修改造成。 - 原PF102、最终KV102均缺InfiniteBuildingData,不是导入时删值或造出null。
- UserService.KVGameplayLoop.cs:65 CreateNew;:101 Claim发生在发布新会话之前。报错为File already exists,而非拒绝访问。
- QuitAct.cs:90
Invoke("Unload",2f),QuitStage.cs:15无条件LoadSceneAsync("PreBoot")。Editor.log顺序:加载QuitStage→QuitAct清理→Bootstrap重新LoadConfig/RegisterServices→同一120896标记已存在异常。对应本次测试退出自动重进,不应推给用户手动重复Play。 - 120896事件流仍有06:25:56Z closed,因此会话排水关闭证据成立;但它不等于整个退出/场景流无异常。之前交付未充分列明退出后的这条异常,本记录补正。
- 当前CLI只读状态:playing=false、Ready=false、permitExists=false;两个claimed均保留。Console历史错误未清除,不能由红字推断仍在运行。
最小处理方向
- 建筑缺键:只将DecodePlayer缺键默认值恢复为
"0",不改getter、不补写服务器key。新落盘《阶段4最小真实玩法闭环R1实施独立复核-2026-09-24.md》已批准该修订及专项回归;本次也核对210项受审hash全部一致。尚未进行实施裁决或编码。 - 退出自动重进:保持一次运行保护和claimed,测试模式关闭后应结束本次运行/明确要求重启,不再走普通模式自动回PreBoot;不能以删除marker、FileMode.Create或吞IOException来放开第二会话。这是新补充发现,具体方法级改动及测试边界需纳入后续裁决,不能把保护抛错直接当成无缺陷退出。
证据:KVGameplayLoopTests/error-investigation-20260924.json保留两条Console完整堆栈;原Editor.log及两次run事件、服务器备份保持。R1继续未关闭。