返回博客列表

终端图形残留问题排查与 Issue 提交

在使用 Claude Code 进行长时间对话时,发现上下文压缩后终端显示会出现异常——旧内容以静态位图形式残留,叠加在当前输出之上。

#Claude Code#VS Code#Terminal#Bug

起因

在使用 Claude Code 进行长时间对话时,发现上下文压缩(compact)后,终端显示会出现异常:旧内容以静态位图形式残留,叠加在当前输出之上。

这个问题在同时打开多个终端实例、GPU 内存压力较大时更容易复现。

发现过程

初步观察

  • 残留内容是先前对话的片段,类似屏幕截图
  • 同一个有问题的字形,其错误图形是固定的
  • 拆分终端窗格再关闭可以清除残留

原因分析

  1. 终端层面:GPU 纹理缓存在显存压力时未能正确清理
  2. 应用层面:压缩后未主动发送刷新序列

Hook 验证

文档中有 PreCompact hook,尝试配置 PostCompact hook:

  • ✅ Hook 存在且可触发
  • ❌ 运行在子进程,无法影响主进程的终端显示

参考 Issue #35816 也确认了这一点。

贡献行动

1. VS Code Issue

提交终端 GPU 纹理缓存问题。

Issue 编号: #315782(opens in a new tab)

状态: ✅ 已提交

环境: VS Code 1.119.0, RTX 3060 Laptop GPU (6GB), Windows 10

复现: 6-7 个 Claude Code 窗口同时运行,压缩后出现残留

特征: 同一错误字形总是相同错误图案(缓存纹理问题)

2. Claude Code Issue

提交压缩后终端残留问题。

Issue 编号: #58094(opens in a new tab)

状态: ✅ 已提交 | ⚠️ Bot 检测为可能重复(已回复说明差异)

Bot 检测重复: #53406, #32480, #50658

差异说明

  • #53406: 浮动 UI 元素残留
  • #32480: 对话框关闭后残留
  • #50658: 输入缓冲区幽灵重现

这些是不同的触发源和症状。

3. Issue #54536 评论

澄清 PostCompact hook 已存在但功能有限。

评论链接: #54536#issuecomment-4423410692(opens in a new tab)

技术分析

为什么会产生残留?

正常情况:
终端 → 渲染 → GPU 纹理缓存 → 显示

压缩时:
压缩触发 → GPU 压力增大 → 纹理缓存被换出 → 新内容渲染
         ↓
旧纹理未被正确清理 → 新内容叠加在旧内容上 → 残留

为什么 Hook 无法解决?

PostCompact hook 运行在子进程中,只能做数据层面的处理(如状态更新),无法影响主进程的终端渲染。

后续计划

  • 等待 VS Code 团队回应
  • 等待 Claude Code 团队回应
  • 考虑文档 PR 补充 PostCompact hook

收获

  • PostCompact hook 已存在但未记录在公开文档
  • 子进程 hook 无法影响主进程 UI
  • 终端 GPU 纹理缓存是独立层面的问题

相关链接


最后更新: 2026-05-12