30 lines
3.1 KiB
Markdown
30 lines
3.1 KiB
Markdown
# 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历史错误未清除,不能由红字推断仍在运行。
|
||
|
||
## 最小处理方向
|
||
|
||
1. 建筑缺键:只将DecodePlayer缺键默认值恢复为`"0"`,不改getter、不补写服务器key。新落盘《阶段4最小真实玩法闭环R1实施独立复核-2026-09-24.md》已批准该修订及专项回归;本次也核对210项受审hash全部一致。尚未进行实施裁决或编码。
|
||
2. 退出自动重进:保持一次运行保护和claimed,测试模式关闭后应结束本次运行/明确要求重启,不再走普通模式自动回PreBoot;不能以删除marker、FileMode.Create或吞IOException来放开第二会话。这是新补充发现,具体方法级改动及测试边界需纳入后续裁决,不能把保护抛错直接当成无缺陷退出。
|
||
|
||
证据:`KVGameplayLoopTests/error-investigation-20260924.json`保留两条Console完整堆栈;原Editor.log及两次run事件、服务器备份保持。R1继续未关闭。
|