TH1/MD/CrashSight_2026-06-05_0.7.2c_1day/blocking/008_index-out-of-range.md

5.7 KiB
Raw Blame History

IndexOutOfRangeException

  • 分类blocking
  • Issue 数1
  • 0.7.2c 最近一天次数1
  • 设备数合计1
  • 报告生成2026-06-05 12:00:37

Issue

Issue 类型 次数 设备 最近上报 消息
02b2941e9c9eb31af21e911afe38c69b IndexOutOfRangeException 1 1 2026-06-05 11:25:28 index + length > size

设备上下文

02b2941e9c9eb31af21e911afe38c69b

  • 样本 CrashIda987c8b4a6e540a3ac9f1c8e021561a8
  • 样本 DeviceId08-8f-c3-45-d9-00
  • CrashSight 附带日志文件:False

最终上报内容:

IndexOutOfRangeException
index + length > size
System.Array.Clear (System.Array array, System.Int32 index, System.Int32 length) (at <00000000000000000000000000000000>.0)
csh.cge (csh a) (at <00000000000000000000000000000000>.0)
csa.cfq (csa a) (at <00000000000000000000000000000000>.0)
cro.cfg (cro a) (at <00000000000000000000000000000000>.0)
cfo.cep (cfo a) (at <00000000000000000000000000000000>.0)
fj.cpp () (at <00000000000000000000000000000000>.0)
fj.bgf () (at <00000000000000000000000000000000>.0)
TH1_Logic.Core.Main.Update () (at <00000000000000000000000000000000>.0)

System.Array.Clear (System.Array array, System.Int32 index, System.Int32 length) (at <00000000000000000000000000000000>.0)
csh.cge (csh a) (at <00000000000000000000000000000000>.0)
csa.cfq (csa a) (at <00000000000000000000000000000000>.0)
cro.cfg (cro a) (at <00000000000000000000000000000000>.0)
cfo.cep (cfo a) (at <00000000000000000000000000000000>.0)
fj.cpp () (at <00000000000000000000000000000000>.0)
fj.bgf () (at <00000000000000000000000000000000>.0)
TH1_Logic.Core.Main.Update () (at <00000000000000000000000000000000>.0)

System.Array.Clear (System.Array array, System.Int32 index, System.Int32 length) (at <00000000000000000000000000000000>.0)
csh.cge (csh a) (at <00000000000000000000000000000000>.0)
csa.cfq (csa a) (at <00000000000000000000000000000000>.0)
cro.cfg (cro a) (at <00000000000000000000000000000000>.0)
cfo.cep (cfo a) (at <00000000000000000000000000000000>.0)
fj.cpp () (at <00000000000000000000000000000000>.0)
fj.bgf () (at <00000000000000000000000000000000>.0)
TH1_Logic.Core.Main.Update () (at <00000000000000000000000000000000>.0)

IndexOutOfRangeException
index + length > size
System.Array.Clear (System.Array array, System.Int32 index, System.Int32 length) (at <00000000000000000000000000000000>.0)
csh.cge (csh a) (at <00000000000000000000000000000000>.0)
csa.cfq (csa a) (at <00000000000000000000000000000000>.0)
cro.cfg (cro a) (at <00000000000000000000000000000000>.0)
cfo.cep (cfo a) (at <00000000000000000000000000000000>.0)
fj.cpp () (at <00000000000000000000000000000000>.0)
fj.bgf () (at <00000000000000000000000000000000>.0)
TH1_Logic.Core.Main.
...

同设备最近 ERROR 上报序列:

时间 Issue 类型 消息
2026-06-05 11:50:24 f491e675022da1efea0d0392ab128f62
2026-06-05 11:49:50 d8de4834232190d1b31e54f83f92455d
2026-06-05 11:49:50 6015aabf5b375a7e2a323b4b520f7fa7
2026-06-05 11:49:48 4c75b2d78a859ca6b6418bd8ea9103c3
2026-06-05 11:38:05 fc2d124d395f06a7f9a3d4f88141e46e
2026-06-05 11:25:28 02b2941e9c9eb31af21e911afe38c69b
2026-06-05 11:01:25 b7c9c2e934523a6a53258c60532a5a16
2026-06-05 11:01:24 cf8c203b0fba86738b81adabfddb6773

代码位置

  • Unity/Assets/Scripts\TH1_Renderer\MapRenderer.cs:289: UpdateDamagePreview();
  • Unity/Assets/Scripts\TH1_Renderer\MapRenderer.cs:294: private void UpdateDamagePreview()
  • Unity/Assets/Scripts\TH1_Renderer\MapRenderer.cs:349: AIActionScoreCalculator.RefreshCalMap(_mapData);
  • Unity/Assets/Scripts\TH1_Renderer\MapRenderer.cs:351: calMap.DeepCopy(_mapData);
  • Unity/Assets/Scripts\TH1_Data\MapData.cs:1991: public void DeepCopy(MapData copyMap)
  • Unity/Assets/Scripts\TH1_Data\PlayerData.cs:184: public void DeepCopy(PlayerMapData copyData)
  • Unity/Assets/Scripts\TH1_Data\PlayerData.cs:440: public void DeepCopy(PlayerData copyData)
  • Unity/Assets/Scripts\TH1_Data\PlayerData.cs:1318: public void DeepCopy(TechTreeData copyData)

解码结论

解码后的完整项目栈是 MapRenderer.Update -> MapRenderer.UpdateDamagePreview -> MapData.DeepCopy -> PlayerMapData.DeepCopy -> PlayerData.DeepCopy -> TechTreeData.DeepCopy -> System.Array.Clear。触发点是鼠标悬停敌方单位 0.5 秒后,伤害预览用 AIActionScoreCalculator.CalMap 深拷贝当前 _mapData 并模拟攻击。

异常 index + length > size 来自集合/数组清理过程,最接近的源码点是 TechTreeData.DeepCopy 里对 TechSetTechAtomActionCacheSetClear() 与重新填充;同方法目前没有清理 TechAtomCacheSet,也没有对 MemoryPackIgnore 的 cache set 做空保护重建。由于样本 hasLogFile=false,不能证明是哪一个集合内部状态损坏,但根因范围已经缩到伤害预览临时 Map 深拷贝中的科技树缓存集合。后续症状可能是鼠标悬停伤害预览崩溃、预览数值不显示,或 AI 计算复用 CalMap 时受脏缓存影响。

判断

这是阻断类,因为 CrashSight 行或 LogError 包装内容中存在真实异常类型、异常对象或调用栈;不是单纯业务状态诊断。 本批样本 hasLogFile=falseAPI 能拿到的是最终上报内容和同设备 ERROR 上报序列,不包含完整 Unity 运行日志;根因上下文按可见上报链路记录。

建议

优先按次数最高的 Issue 样本复现并修复;若同设备上报序列中出现更早的异常,应以更早异常作为源头处理。