codev / docs /cli /debug-system.md
chenbhao's picture
chore: rename VersperClaw to Codev, update org to chenbhao
96f34e3
|
Raw
History Blame Contribute Delete
4.45 kB

调试系统

概述

Codev 提供两层调试能力:

  1. 会话级调试日志 — 基于 logForDebugging() 的持久化日志系统,用于内部诊断
  2. /debug 交互式调试 — 基于 DEBUG PROBE 的主动式调试工作流(v2.0)

1. 会话调试日志

基础用法

通过 CLI 标志启用:

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/<sessionId>.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 <bug描述>
        │
        ▼
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 格式

// DEBUG PROBE [1] <label>
try {
  require('fs').appendFileSync('.codev-debug/debug.log',
    `[${new Date().toISOString()}] [js] file.ts:42 | label | value=${JSON.stringify(value)}\n`)
} catch {}
// DEBUG PROBE END [1]

规则:

  • 探针必须是只观察不修改
  • 每个探针有唯一编号 [N] 和匹配的 START/END 标记
  • 每种语言的探针模板不同(JS/TS、Python、Go、Rust)
  • 最多 3 轮探针迭代
  • 必须在最终回复前完全清理

DebugSession 工具

工具名:DebugSession

可用动作:

动作 说明
init 创建 .codev-debug/ 目录、debug.logstate 文件
begin_run 追加 RUN #N 分隔符,递增运行计数器
begin_verify 追加 VERIFY 分隔符
read_log 读取 debug.log 尾部内容
cleanup 删除 .codev-debug/ 目录

目录结构

.codev-debug/
  debug.log       -- 探针写入 + RUN/VERIFY 分隔符
  state           -- JSON: { "runCount": 3 }

核心文件

文件 职责
src/skills/bundled/debug.ts /debug skill 定义,8 步工作流提示词,探针模板
src/tools/DebugSessionTool.ts DebugSession 工具实现
src/utils/debug.ts 通用调试日志基础设施
src/commands/debug-tool-call/index.js 遗留桩命令(isEnabled: false