# 调试系统 ## 概述 Codev 提供两层调试能力: 1. **会话级调试日志** — 基于 `logForDebugging()` 的持久化日志系统,用于内部诊断 2. **`/debug` 交互式调试** — 基于 DEBUG PROBE 的主动式调试工作流(v2.0) --- ## 1. 会话调试日志 ### 基础用法 通过 CLI 标志启用: ```bash claude --debug # 启用调试日志 claude --debug=api,hooks # 按分类过滤 claude -d # 简写 claude --debug-file=/tmp/debug.log # 自定义日志路径 claude --debug-to-stderr # 输出到 stderr ``` 环境变量: | 变量 | 说明 | |------|------| | `DEBUG` / `DEBUG_SDK` | 启用调试模式 | | `CLAUDE_CODE_DEBUG_LOG_LEVEL` | 最低级别:`verbose`, `debug`, `info`, `warn`, `error` | | `CLAUDE_CODE_DEBUG_LOGS_DIR` | 自定义日志目录 | ### 日志位置 默认路径:`~/.claude/debug/.txt` `latest` 符号链接总是指向最新会话的日志文件。 ### 核心文件 | 文件 | 职责 | |------|------| | `src/utils/debug.ts` | `logForDebugging()`, `isDebugMode()`, `enableDebugLogging()`, `getDebugLogPath()` | | `src/utils/debugFilter.ts` | 分类过滤:`parseDebugFilter()`, `shouldShowDebugMessage()` | | `src/utils/bufferedWriter.ts` | 缓冲写入器,批量写入日志 | `logForDebugging()` 在代码库中 250+ 个文件中使用。 --- ## 2. `/debug` 交互式调试(v2.0) ### 架构 ``` 用户输入 /debug │ ▼ debug.ts (bundled skill) │ ▼ 8 步 CHECKPOINT 工作流注入模型上下文 │ ▼ 模型自动执行:分析 → 插探针 → 复现 → 分析日志 → 修复 → 验证 → 清理 │ ▼ DebugSessionTool — 管理 .codev-debug/ 目录 ``` ### 与 v1 的区别 | 方面 | v1(旧) | v2.0(当前) | |------|---------|-------------| | 方式 | 被动读取调试日志 | 主动插入探针 | | 数据源 | `~/.claude/debug/*.txt` | `.codev-debug/debug.log` | | 模型角色 | 分析已有日志 | 插桩 → 复现 → 分析 → 修复 | | 工作流 | 无结构化步骤 | 8 步 CHECKPOINT | ### 8 步 CHECKPOINT 工作流 | 步骤 | 操作 | |------|------| | **Step 0: Triage** | 确认 bug 报告完整(预期/实际/复现步骤/一致性/错误) | | **Step 1: Plan Probes** | 阅读代码,形成 2-3 个假设,输出探针插入计划表 | | **Step 2: Init Session** | 调用 `DebugSession({ action: "init" })` 创建 `.codev-debug/` | | **Step 3: Insert Probes** | 用 Edit 插入 `DEBUG PROBE [N]` / `DEBUG PROBE END [N]` 代码块 | | **Step 4: Reproduce & Log** | 调用 `DebugSession begin_run`,运行复现命令,通过 `read_log` 收集 | | **Step 5: Analyze** | 引用日志行,定位根因 | | **Step 6: Fix & Verify** | 修复后调用 `begin_verify`,重跑,对比日志 | | **Step 7: Cleanup** | 删除所有探针,Grep 确认清理,调用 `DebugSession cleanup` | | **Final** | 总结根因、证据、修复、验证、清理 | ### DEBUG PROBE 格式 ```typescript // DEBUG PROBE [1]