8.9 KiB
8.9 KiB
Cursor 渲染崩溃(code:5)复盘与防复发范式
真源 · 卡若AI 唯一入口 · 2026-06-12
Skill:01_卡资(金)/金仓_存储备份/Cursor稳定性/SKILL.md
适用:Cursor 3.7.x · macOS · 多根工作区(个人+卡若AI)
禁止在外层 个人/.cursor/rules/ 复制本文或 cursor-stability.mdc;对话只读卡若AI 本 Skill。
一、事件摘要
| 现象 | 日志/证据 |
|---|---|
弹窗 reason: crashed, code: 5 |
main.log: renderer process gone (code: 5) |
切 Chat 标签 / 点别的 App / 打开 .cursor/rules 就崩 |
RendererPing blocked ~15s 后 code 5 |
| Source Control 显示 540 变更 / +63147 行 | 524 个未跟踪文件 + Git 把 PNG/JSON 当文本计行 |
| 每次点 Reopen 更严重 | window:1→2→3→4,emptyWindows 叠 ghost 窗 |
结论:不是 state.vscdb 体积单因,而是 渲染负载叠加(SCM 巨型 diff + 多窗 + Agent 循环 + 超大 alwaysApply 规则)。
二、根因矩阵(四层)
┌─────────────────────────────────────────────────────────┐
│ L4 行为 Reopen 叠窗 · Agent 运行时切标签/点外窗 │
├─────────────────────────────────────────────────────────┤
│ L3 规则 persistent-chat.mdc alwaysApply:true(26KB) │
│ 每轮 Agent 全量注入 → 打开规则文件即崩 │
├─────────────────────────────────────────────────────────┤
│ L2 Git 500+ untracked · DNS 备份 JSON · 旧 MCP 包 │
│ · 教程 PNG 计万行 → SCM 面板渲染 OOM │
├─────────────────────────────────────────────────────────┤
│ L1 引擎 Chromium/V8 EXC_BREAKPOINT(.ips 报告) │
│ 非经典 OOM,多为 UI 线程卡死后崩溃 │
└─────────────────────────────────────────────────────────┘
误区(禁止再犯)
| ❌ 错误诊断 | ✅ 实际 |
|---|---|
删整个 state.vscdb |
聊天列表空白,问题仍在 |
--deep 删全部 bubbleId |
历史对话不可读 |
| 只瘦身 DB 不处理 Git/多窗 | Changes 仍 +6 万行,一点 SCM 就卡 |
三、已落地配置(维护清单)
3.1 用户级 ~/Library/Application Support/Cursor/User/settings.json
| 键 | 值 | 作用 |
|---|---|---|
window.restoreWindows |
none |
启动不恢复多窗 |
window.openWithoutArgumentsInNewWindow |
off |
禁止无意多开 |
workbench.editor.restoreViewState |
false |
少恢复编辑器状态 |
workbench.editor.limit.value |
6 |
限制打开标签数 |
git.openRepositoryInParentFolders |
never |
外层仓不重复扫子仓 |
git.autorefresh |
false |
降 SCM 刷新频率 |
git.untrackedChanges |
hidden |
隐藏 untracked 装饰 |
scm.diffDecorations |
none |
关 diff 高亮装饰 |
java.enabled |
false |
关 Java 语言服务(6 扩展包) |
cursor.general.enableCodebaseIndexing |
false |
关全库索引 |
3.2 工作区 .vscode/settings.json(个人/)
{
"java.enabled": false,
"java.autobuild.enabled": false,
"git.autorefresh": false,
"git.untrackedChanges": "hidden"
}
3.3 .cursor/rules 策略
| 文件 | alwaysApply | 说明 |
|---|---|---|
persistent-chat.mdc |
false | 可持续对话:按需启用,禁止默认注入 26KB |
cursor-stability.mdc |
true | 精简铁律(<2KB),只含崩溃 SOP |
karuo-recap-v53.mdc 等 |
true | 保持短小,单文件建议 <5KB |
铁律:任何 alwaysApply: true 规则 ≤5KB;超长流程放 SKILL.md / 参考资料,不要进 rules。
3.4 .gitignore(双仓)
外层 个人/.gitignore:忽略 卡若AI/(独立 Gitea 仓)、本地目录、二进制、*.apk/*.ttc 等。
内层 卡若AI/.gitignore(2026-06-12 段):
Cursor持久对话_MCP_*/
**/backups/dns/
**/服务器管理/backups/
**/图文教程/作图/*.png
**/图文教程/images/*.png
运营中枢/参考资料/images/
CodexAccountBackupRestore/
cursor-openai-api-runtime/
**/.pw-*/
**/.venv_aliyun*/
原则:本地包、备份快照、教程大图 永不进 Changes;真实脚本要么 commit,要么 gitignore,禁止长期 ?? 堆几百个。
3.5 ~/.cursor/argv.json
- 禁止
"js-flags": "--max-old-space-size=8192"(曾导致异常) - 保留默认;除非 Cursor 官方建议,勿改 heap
四、修复脚本(Cmd+Q 后执行)
| 脚本 | 用途 |
|---|---|
金仓_存储备份/脚本/cursor_code5_fix.sh |
清 emptyWindows + settings + DB 缓存(Cursor 关着时 --db) |
金仓_存储备份/脚本/cursor_renderer_crash_fix.sh |
瘦身 composer 列表、snapshots、聊天截图 |
金仓_存储备份/脚本/cursor_launch_noext.sh |
无扩展启动(隔离测试) |
# 标准流程
# 1) Cmd+Q 完全退出 Cursor
bash "…/cursor_code5_fix.sh" # 在线可跑部分
bash "…/cursor_code5_fix.sh" --db # Cursor 退出后清 DB
# 2) 只开 1 个窗口重开
五、崩溃弹窗 SOP(必须照做)
- 勾选
Don't restore editors - 点 Close(灰色)— 禁止 Reopen / New Window 叠窗
- Cmd+Q 完全退出 → 跑修复脚本 → 再开 1 个窗口
六、跨项目 / 跨对话防复发范式
6.1 新仓库初始化 Checklist
.gitignore含:node_modules/、.venv/、**/.pw-*/、本地备份、大图- 外层 monorepo 不要重复跟踪内层 Git 仓(
子目录/整目录 ignore) .cursor/rules/仅放 短规则;Skill 放SKILL.mdgit status未跟踪 <20 个 再日常开发;超过则 commit 或 ignore- 多根工作区:内层仓独立 push Gitea,外层只放
.cursor/rules同步副本
6.2 日常 Agent 对话
| 做 | 不做 |
|---|---|
| 单 Cursor 窗口 | Cmd+Shift+N 多开 |
| Agent 跑完再切标签 | Agent-loop 活跃时切窗/点别的 App |
用 cursor_code5_fix.sh 巡检 |
手删 state.vscdb |
旧对话空白 → agent_sync_restore.py restore --name "关键词" |
--aggressive 删 bubbleId |
6.3 Source Control 健康线
| 指标 | 警戒线 | 动作 |
|---|---|---|
| 未提交文件数 | >50 | 分批 commit 或 gitignore |
| diff 行数 | >5000 | 查 PNG/JSON/备份是否被跟踪 |
emptyWindows |
>0 | 跑 cursor_code5_fix.sh |
| composer 列表 | >200 条 | 跑 cursor_renderer_crash_fix.sh |
6.6 全仓库批量防护(2026-06-12)
bash "01_卡资(金)/金仓_存储备份/脚本/cursor_scm_guard_apply.sh"
- 扫描
Documents/{个人,开发,1、金:项目,工作手机}下 全部 Git 仓 - 每仓补
.gitignoreSCM 防崩溃块 +.vscode/settings.json - 新仓 clone 后 先跑一遍 再开 Cursor
6.7 其他 Cursor 标签 / 项目
每个 Cursor Chat 标签 = 独立 Agent 上下文;共享同一 MCP 进程时:
- 标签名用中文(减少绑定混乱)
- 可持续对话(
persistent-chat)仅在需要面板续跑时手动启用 - 普通任务 不 加载 26KB 持久对话规则
6.5 扩展隔离
仍崩时(保留 GPU):
/Applications/Cursor.app/Contents/MacOS/Cursor --disable-extensions "/path/to/project"
- 不崩 → 卸 Java 扩展包(
redhat.java+vscjava.*) - 仍崩 → 向 Cursor 反馈 code 5 + 附
~/Library/Logs/DiagnosticReports/最新.ips
七、本次修复提交索引
| 仓库 | 提交 | 内容 |
|---|---|---|
个人 |
433ddd00 |
persistent-chat.mdc → alwaysApply: false |
卡若AI |
(2026-06-12 chore) | 484 文件入库 + SCM gitignore 段 |
八、相关真源(仅卡若AI)
- Skill 唯一入口:
01_卡资(金)/金仓_存储备份/Cursor稳定性/SKILL.md - 规则铁律:
.cursor/rules/cursor-stability.mdc(仅本仓,外层个人不复制) - 脚本目录:
01_卡资(金)/金仓_存储备份/脚本/ - 聊天恢复:
01_卡资(金)/金仓_存储备份/聊天记录管理/脚本/agent_sync_restore.py - 可持续对话(按需):
01_卡资(金)/金仓_存储备份/Cursor持久对话/SKILL.md
九、一句话记忆
code 5 = 渲染器扛不住 UI 负载:Git 六万行 diff + Reopen 叠窗 + 超大 rules 自动注入 + Agent 运行时切窗。
治根:清 SCM、单窗、关 Reopen、短 rules、脚本巡检——不是删数据库。