<!-- title: Claude Code调试排障与Worktree并行实战 -->

# Claude Code调试排障与Git Worktree并行开发全实战

## 概述

本教程面向已掌握Claude Code基础操作的开发者，深入讲解如何利用Claude Code进行高效的Bug诊断与生产环境故障排查，以及如何通过Git Worktree实现多个Claude Code Agent的并行隔离开发。学完后，你将掌握：结构化调试提示词技巧、上下文窗口管理策略、Worktree并行工作流、以及从错误堆栈到根因定位的完整实战流程。

**适用人群**：有一定Claude Code使用经验，希望提升调试效率和并行开发能力的中高级开发者。

**预计学习时长**：3-4小时（含动手实践）。

---

## 前置条件

| 条件 | 说明 |
|------|------|
| Claude Code CLI | 已安装并完成Anthropic账户认证（`claude --version` ≥ 1.0） |
| Git | 版本 ≥ 2.5（支持 `git worktree`） |
| Node.js | ≥ 18.x（Claude Code运行环境） |
| 测试项目 | 准备一个包含Bug的真实或练习项目（本文使用Next.js示例） |
| IDE | VS Code或JetBrains（可选，配合Claude Code扩展更佳） |

### 环境确认命令

```bash
# 验证 Claude Code 版本
claude --version

# 验证 Git 版本（需要支持 worktree）
git --version

# 确认当前在 Git 仓库中
git status
```

---

## 第一部分：Claude Code调试工作流深度解析

### 1.1 为什么用Claude Code调试而不只是写代码

传统调试流程是：看报错 → 搜索文档 → 读源码 → 写修复 → 测试验证。这个循环中，**上下文切换**是最大的效率杀手。Claude Code的核心优势在于：

- **全局代码感知**：它能同时看到报错信息、相关源文件、配置文件和测试代码
- **因果链追踪**：从表面错误自动追溯到根因，跨越多个文件和模块
- **迭代式诊断**：你可以持续追问"为什么"，它会保持完整上下文

### 1.2 调试前的上下文准备：让Claude Code高效工作的关键

调试效率直接取决于你提供的上下文质量。以下是分层的上下文准备策略：

#### 策略一：精准的初始提示词

```text
❌ 糟糕的调试提示：
"我的应用报错了，帮我修一下"

✅ 高效的调试提示：
"我的Next.js应用在用户登录时报500错误。
具体错误信息：
[粘贴完整错误堆栈]

涉及的关键文件：
- src/app/api/auth/route.ts（API路由）
- src/lib/auth.ts（认证逻辑）
- src/middleware.ts（中间件）

复现步骤：
1. 访问 /login 页面
2. 输入有效邮箱和密码
3. 点击登录按钮
4. 控制台显示500错误

环境信息：Next.js 15.3, Node 20.x, PostgreSQL 16

请分析根因并给出修复方案。"
```

**关键要素**：错误堆栈 → 涉及文件 → 复现步骤 → 环境信息。四要素齐备时，Claude Code的首次诊断准确率可提升60%以上。

#### 策略二：利用CLAUDE.md预加载项目上下文

在项目根目录创建或更新 `CLAUDE.md`，写入调试相关的项目知识：

```markdown
# Project: E-Commerce Platform

## Architecture
- Frontend: Next.js 15 App Router + Tailwind CSS
- Backend: Next.js API Routes + Prisma ORM
- Database: PostgreSQL 16
- Auth: NextAuth.js v5

## Key Paths
- API routes: src/app/api/
- Database schema: prisma/schema.prisma
- Auth config: src/lib/auth.config.ts
- Environment: .env.local (never commit!)

## Known Issues
- Session token expires after 1h (by design)
- Rate limiter may block legit traffic at high concurrency
- Image upload fails for files > 5MB

## Debugging Tips
- Run `npm run db:studio` for database inspection
- Check `logs/` directory for server-side logs
- Use `/compact` when context gets heavy during long debug sessions
```

#### 策略三：使用 `/init` 自动生成项目配置

```bash
# 在项目根目录运行
claude
> /init
```

`/init` 命令会扫描项目结构，自动生成包含技术栈、目录说明和编码规范的 `CLAUDE.md`，为后续调试会话建立基准上下文。

### 1.3 结构化调试五步法

以下是一个经过实践验证的Claude Code调试流程，适用于从简单的类型错误到复杂的生产环境故障。

```mermaid
flowchart TD
    A[收集错误信息] --> B[精准描述给Claude Code]
    B --> C[Claude分析根因]
    C --> D{修复方案是否明确?}
    D -->|是| E[应用修复]
    D -->|否| F[补充上下文<br/>添加日志/断点]
    F --> C
    E --> G[运行测试验证]
    G --> H{测试通过?}
    H -->|是| I[完成修复<br/>提交代码]
    H -->|否| J[反馈失败信息<br/>进入下一轮迭代]
    J --> C

    style A fill:#e1f5fe
    style C fill:#fff3e0
    style E fill:#e8f5e9
    style I fill:#c8e6c9
```

#### 第一步：收集错误信息

```bash
# 方法1：直接捕获运行时错误
npm run dev 2>&1 | tee debug-output.log

# 方法2：查看构建错误
npm run build 2>&1 | tail -50

# 方法3：查看测试失败详情
npm test -- --reporter=verbose 2>&1 | head -100
```

#### 第二步：精准描述给Claude Code

进入Claude Code交互模式，使用结构化模板：

```text
我在 [场景] 中遇到了 [错误类型] 错误。

错误信息：
[完整堆栈]

相关代码文件：
- [文件路径1]: [该文件的作用]
- [文件路径2]: [该文件的作用]

我已经尝试过的排查：
1. [操作1] → [结果1]
2. [操作2] → [结果2]

期望的正确行为：[描述]
```

#### 第三步：让Claude Code分析根因

Claude Code会自动执行以下分析链：

1. **读取错误堆栈** → 定位出错文件和行号
2. **读取相关源码** → 理解代码逻辑和数据流
3. **检查依赖关系** → 查看imports、类型定义和配置
4. **交叉引用** → 对比类似模式在项目中的其他实现

你可以用以下命令引导它深入分析：

```text
# 引导深入分析
"请分析这个错误的根因，不要只看表面报错，追踪完整调用链"

# 引导查看特定文件
"请读取 src/lib/auth.ts 和 src/middleware.ts，分析它们之间的数据流"

# 引导对比分析
"项目中其他API路由是如何处理认证的？和这个报错的路由有什么区别？"
```

#### 第四步：迭代式修复

```text
# 第一轮修复
"请给出修复方案，只修改必要的代码，不要重构不相关的部分"

# 如果修复引入新问题
"你的修复解决了原始报错，但引入了新问题：[描述新问题]。
请在保持修复的前提下，解决这个新问题。"

# 如果需要更多上下文
"请先在 src/lib/auth.ts 的第42行和第58行添加 console.log，
分别打印 token 值和 user 对象，我需要看到运行时的实际数据。"
```

#### 第五步：验证修复

```text
# 运行测试
"请运行 npm test 验证修复是否正确，如果测试失败，分析失败原因"

# 检查副作用
"请检查这个修复是否可能影响其他模块，特别是 [相关模块名]"

# 代码审查
"/review"
```

### 1.4 实战案例：诊断生产环境API超时

**场景**：一个Next.js电商平台的订单API在高并发时返回504超时。

```text
# 启动Claude Code调试会话
claude

# 输入调试描述
> 我的订单创建API在高并发时返回504 Gateway Timeout。
> 
> 错误日志（从生产环境收集）：
> ```
> Error: 504 Gateway Timeout
>   at OrderService.createOrder (src/services/order.service.ts:87)
>   at async OrderController.store (src/controllers/order.controller.ts:45)
> PrismaClientInitializationError: Connection pool exhausted
>   at PrismaClient._execute (node_modules/.prisma/client/index.js:1234)
> ```
> 
> 涉及文件：
> - src/services/order.service.ts — 订单业务逻辑
> - src/controllers/order.controller.ts — API控制器
> - prisma/schema.prisma — 数据库模型
> - src/lib/prisma.ts — Prisma客户端实例
> 
> 并发量：约500 QPS
> 数据库：PostgreSQL 16 (RDS db.r6g.large)
> 连接池配置：默认Prisma配置
```

Claude Code会分析出：**根因是Prisma连接池耗尽**。默认Prisma连接池大小远不够支撑500 QPS。它会：

1. 读取 `prisma/schema.prisma` 确认当前连接池配置
2. 读取 `src/lib/prisma.ts` 确认Prisma客户端初始化方式
3. 读取 `src/services/order.service.ts` 分析事务使用模式
4. 给出分层修复方案：

```typescript
// 修复1：src/lib/prisma.ts — 调整连接池参数
import { PrismaClient } from '@prisma/client'

export const prisma = new PrismaClient({
  datasources: {
    db: {
      url: process.env.DATABASE_URL,
    },
  },
  // 关键修复：增大连接池
  // 公式：pool_size = num_connections = (CPU_cores * 2) + effective_spindle_count
  // db.r6g.large = 2 vCPU → 5 connections per instance
  // 4 instances → 20 connections minimum, set to 25 with buffer
})

// 修复2：在 prisma/schema.prisma 添加连接池配置
// datasource db {
//   provider  = "postgresql"
//   url       = env("DATABASE_URL")
//   relationMode = "prisma"
//   + connection_limit = 25
//   + pool_timeout = 10
// }

// 修复3：src/services/order.service.ts — 添加超时和重试
async createOrder(data: CreateOrderDto) {
  const maxRetries = 3
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      return await this.prisma.$transaction(
        async (tx) => {
          // ... 订单创建逻辑
        },
        {
          maxWait: 5000,   // 最大等待时间 5s
          timeout: 10000,  // 事务超时 10s
        }
      )
    } catch (error) {
      if (attempt === maxRetries) throw error
      await new Promise(r => setTimeout(r, 100 * attempt))
    }
  }
}
```

### 1.5 长调试会话的上下文管理

调试往往是最消耗上下文窗口的场景。一次复杂的调试会话可能持续数百轮对话，很容易耗尽200K token的上下文窗口。

#### 自动压缩 vs 手动控制

Claude Code会在接近上下文上限时自动触发 **compaction**（压缩），但调试场景下，你需要更主动地管理：

| 操作 | 命令 | 何时使用 |
|------|------|----------|
| 手动压缩 | `/compact` | 长调试会话中每15-20轮 |
| 清空重开始 | `/clear` | 方向错误需要重新出发 |
| 查看上下文 | `/context` | 确认当前加载了哪些文件 |
| 切换模型 | `/model` | 简单问题切Haiku省token |

#### 压缩策略：保留关键信息

```text
# 在压缩前，让Claude Code记住关键发现
> 在压缩上下文之前，请总结以下信息到你的记忆中：
> 1. 已确认的根因：Prisma连接池耗尽
> 2. 已应用的修复：连接池增大到25，添加事务超时
> 3. 待验证：负载测试下连接池表现
> 4. 关键文件：src/lib/prisma.ts, src/services/order.service.ts

> /compact
```

#### 使用 `/compact` 的最佳实践

```text
# 带自定义指令的压缩（推荐）
> /compact 请保留所有已确认的Bug信息和已应用的修复记录，可以丢弃探索过程中的中间代码片段
```

**压缩后Claude Code会保留的内容**：
- CLAUDE.md 中的项目指令
- `.claude/settings.json` 中的配置
- `.claude/memory/` 中的持久记忆
- 系统提示和工具定义

**压缩后可能丢失的内容**：
- 早期探索中读取但后续未引用的文件内容
- 中间尝试的代码片段（已回滚的）
- 不再相关的错误日志

---

## 第二部分：Git Worktree并行开发实战

### 2.1 Worktree解决什么问题

当你同时需要处理多个任务时（比如：修Bug A的同时开发Feature B），传统做法是：
- 开多个终端tab → 但共享同一个工作目录，文件冲突
- 频繁 `git stash` → 容易遗忘，恢复出错
- `git clone` 多份 → 磁盘浪费，配置不同步

**Git Worktree** 是Git内置的功能，允许你在同一个仓库下创建多个独立的工作目录，每个目录对应不同的分支。Claude Code从2025年底开始原生支持Worktree模式，让多个Agent实例真正并行工作。

```mermaid
graph LR
    subgraph "传统串行开发"
        A1[任务1] --> A2[任务2] --> A3[任务3]
    end

    subgraph "Worktree并行开发"
        B1[Agent 1<br/>fix/auth-bug]
        B2[Agent 2<br/>feature/payment]
        B3[Agent 3<br/>refactor/api]
        B1 ~~~ B2 ~~~ B3
    end

    style B1 fill:#bbdefb
    style B2 fill:#c8e6c9
    style B3 fill:#fff9c4
```

### 2.2 Worktree基础概念

```
my-project/                  ← 主工作目录 (main branch)
├── .git/                    ← Git仓库核心
├── .claude/                 ← Claude Code配置
│   └── worktrees/           ← Claude Code管理的Worktree
│       ├── fix-auth-bug/    ← Agent 1的工作目录
│       ├── feature-payment/ ← Agent 2的工作目录
│       └── refactor-api/    ← Agent 3的工作目录
├── src/
├── package.json
└── ...
```

每个Worktree是：
- **独立的工作目录**：有自己的文件系统状态
- **独立的分支**：在各自的分支上提交，互不干扰
- **共享的Git历史**：底层是同一个 `.git` 仓库
- **共享的项目配置**：CLAUDE.md、.claude/settings.json 等

### 2.3 方法一：使用Claude Code内置Worktree支持

这是最推荐的方式，Claude Code会自动管理Worktree的创建和清理。

#### 启动Worktree会话

```bash
# 方式A：启动Claude Code时指定worktree
claude --worktree fix-auth-bug

# 方式B：在会话中使用EnterWorktree工具
claude
> 请创建一个worktree来修复认证Bug
# Claude Code会调用内置的EnterWorktree工具自动处理
```

#### 在Claude Code交互中操作Worktree

```text
# 创建一个新的worktree
> 请在一个新的worktree中工作，名称为 fix-auth-bug

# Claude Code会自动：
# 1. 创建 .claude/worktrees/fix-auth-bug/ 目录
# 2. 创建对应的 git 分支 claude/fix-auth-bug
# 3. 切换工作目录到新的worktree
# 4. 加载项目配置（CLAUDE.md等）

# 完成工作后退出worktree
> 请退出worktree，保留修改

# 或者丢弃修改
> 请退出worktree并丢弃所有更改
```

#### 配置 `.worktreeinclude`

如果你希望Worktree只包含特定的文件子集（加速大型项目的上下文加载），在项目根目录创建 `.worktreeinclude`：

```text
# .worktreeinclude
src/lib/auth*
src/middleware*
src/app/api/auth/**
prisma/schema.prisma
package.json
tsconfig.json
```

只有匹配这些模式的文件会被包含在Worktree的上下文中，显著减少token消耗。

### 2.4 方法二：手动Git Worktree + 多终端

对于需要精确控制的场景，可以手动管理Worktree：

```bash
# 步骤1：创建Worktree
git worktree add ../fix-auth-bug fix-auth-bug
# 输出: Preparing worktree (new branch 'fix-auth-bug')
# HEAD is now at abc1234 feat: initial commit

# 步骤2：在另一个终端中启动Claude Code
cd ../fix-auth-bug
claude

# 步骤3：同时在主目录启动另一个Claude Code
cd my-project
claude
# 两个Agent互不干扰地工作

# 步骤4：完成后合并
cd my-project
git merge fix-auth-bug

# 步骤5：清理Worktree
git worktree remove ../fix-auth-bug
```

### 2.5 多Agent并行调试实战

**场景**：同时需要修复两个独立的Bug，并且它们修改不同的文件。

```bash
# 终端1：主仓库，修复支付超时Bug
cd ~/projects/my-app
claude --worktree fix-payment-timeout

# 终端2：并行修复认证Bug
claude --worktree fix-auth-bug

# 终端3：在主分支上开发新功能
claude
```

在终端1中的Claude Code会话：

```text
> 我需要修复支付API超时的问题。
> 
> 错误日志：
> TimeoutError: Payment gateway request timed out after 30000ms
>   at PaymentService.processPayment (src/services/payment.service.ts:156)
> 
> 请分析根因并修复。修复范围限制在 src/services/payment.service.ts 和 src/config/payment.ts。
```

在终端2中的Claude Code会话（同时进行）：

```text
> 我需要修复JWT Token刷新失败的问题。
> 
> 错误日志：
> JsonWebTokenError: jwt expired
>   at AuthService.refreshToken (src/services/auth.service.ts:89)
> 
> 请分析根因并修复。修复范围限制在 src/services/auth.service.ts 和 src/middleware.ts。
```

**关键要点**：两个Agent修改不同的文件，不会有冲突。完成后分别合并即可。

### 2.6 Worktree冲突处理

当两个Worktree修改了同一文件时，需要处理合并冲突：

```bash
# 查看所有Worktree状态
git worktree list

# 尝试合并第一个分支
git merge fix-payment-timeout

# 如果有冲突，让Claude Code帮助解决
claude
> 合并 fix-payment-timeout 分支时出现冲突，请帮我解决：
> 
> 冲突文件：src/config/constants.ts
> 
> 请读取冲突文件，分析两个分支的修改意图，生成保留两方修改的合并结果。
```

### 2.7 Worktree清理与维护

```bash
# 查看所有活跃的Worktree
git worktree list

# 清理已合并的Worktree
git worktree prune

# 删除特定Worktree
git worktree remove .claude/worktrees/fix-auth-bug

# 强制删除（有未提交更改时）
git worktree remove --force .claude/worktrees/fix-auth-bug
```

**Claude Code自动清理**：使用 `--worktree` 标志启动的会话，如果Agent没有做任何修改，Worktree会自动清理。如果有未提交的修改，会提示你选择保留或丢弃。

---

## 第三部分：调试中的高级技巧

### 3.1 使用 `/review` 进行代码审查

修复完成后，用 `/review` 让Claude Code从另一个角度审查你的修复：

```text
> /review

# Claude Code会分析当前diff，检查：
# 1. 是否引入新的Bug
# 2. 是否有性能问题
# 3. 是否符合项目编码规范
# 4. 是否有安全隐患
```

### 3.2 精准的错误信息收集

对于不同类型的错误，收集信息的方式不同：

```bash
# TypeScript编译错误 — 收集完整类型链
npx tsc --noEmit 2>&1 | head -50

# 运行时错误 — 带source map的堆栈
NODE_OPTIONS='--enable-source-maps' npm start

# 测试失败 — 详细输出
npm test -- --verbose 2>&1 | tee test-failure.log

# 数据库错误 — 启用Prisma查询日志
# 在 src/lib/prisma.ts 中设置 log: ['query', 'error', 'warn']

# 网络请求错误 — 抓取请求/响应
# Claude Code可以帮你添加请求拦截器日志
```

### 3.3 渐进式调试：从最小验证开始

```text
# 第一步：让Claude Code创建最小复现
> 请根据这个错误，创建一个最小复现脚本 test-bug.ts，
> 只包含触发错误所需的最少代码

# 第二步：运行最小复现
> 请运行 npx tsx test-bug.ts 并分析输出

# 第三步：逐步添加复杂度
> 现在请把中间件逻辑加回去，看是否还报错

# 第四步：确认修复有效
> 请运行完整测试套件确认修复没有引入回归
```

### 3.4 跨文件追踪：从错误到根因的完整路径

```text
# 让Claude Code追踪完整调用链
> 这个错误的完整调用链是什么？请从入口点开始，列出每一层调用，
> 标注每层的文件路径和行号，直到到达出错位置

# Claude Code输出示例：
# 调用链分析：
# 1. src/app/api/orders/route.ts:23     → POST handler 接收请求
# 2. src/controllers/order.controller.ts:45 → OrderController.store()
# 3. src/services/order.service.ts:67   → OrderService.createOrder()
# 4. src/lib/prisma.ts:15               → prisma.$transaction() ← 连接池耗尽
# 5. node_modules/.prisma/client:1234   → PrismaClient初始化错误
```

### 3.5 利用Claude Code记忆系统保存调试知识

调试完成后，把学到的经验保存到Claude Code的记忆系统中：

```text
> 请记住以下调试经验：
> - 项目使用Prisma ORM，默认连接池不够支撑高并发
> - 修复方案：在schema.prisma中设置connection_limit=25和pool_timeout=10
> - 相关文件：src/lib/prisma.ts, prisma/schema.prisma
> - 参考文档：https://www.prisma.io/docs/guides/performance-and-optimization/connection-management
```

这些记忆会保存到 `.claude/memory/` 目录，在未来的会话中自动加载。

---

## 第四部分：完整实战项目——全栈应用的并行调试与修复

### 4.1 项目背景

假设我们有一个包含以下Bug的全栈应用：

| Bug ID | 描述 | 严重程度 | 涉及文件 |
|--------|------|----------|----------|
| BUG-101 | 用户注册后收不到验证邮件 | P1 | `src/services/email.service.ts` |
| BUG-102 | 商品列表分页不正确，第二页返回空数据 | P2 | `src/services/product.service.ts` |
| BUG-103 | 管理后台Dashboard加载缓慢（>10s） | P2 | `src/app/admin/dashboard/page.tsx` |

### 4.2 执行流程

```mermaid
sequenceDiagram
    participant Dev as 开发者
    participant W1 as Worktree 1<br/>BUG-101
    participant W2 as Worktree 2<br/>BUG-102
    participant W3 as Worktree 3<br/>BUG-103
    participant Main as 主分支

    Dev->>W1: 启动 claude --worktree fix-email
    Dev->>W2: 启动 claude --worktree fix-pagination
    Dev->>W3: 启动 claude --worktree fix-dashboard

    Note over W1: 分析邮件服务配置<br/>发现SMTP端口错误
    Note over W2: 分析分页逻辑<br/>发现offset计算错误
    Note over W3: 分析查询性能<br/>发现N+1查询问题

    W1->>W1: 修复SMTP配置 + 添加重试
    W2->>W2: 修复offset = (page-1)*limit
    W3->>W3: 添加eager loading + 缓存

    W1->>W1: 运行邮件服务测试 ✅
    W2->>W2: 运行分页测试 ✅
    W3->>W3: 运行性能测试 ✅

    W1->>Main: git merge fix-email
    W2->>Main: git merge fix-pagination
    W3->>Main: git merge fix-dashboard

    Main->>Main: 运行完整测试套件 ✅
    Note over Main: 三个Bug全部修复<br/>并行节省 60% 时间
```

### 4.3 具体执行步骤

#### 启动三个并行Worktree

```bash
# 窗口1：修复邮件服务
cd ~/projects/my-fullstack-app
claude --worktree fix-email-verification

# 在Claude Code中输入：
> Bug描述：用户注册后收不到验证邮件。
> 
> 环境信息：
> - 邮件服务：Nodemailer + SMTP (Gmail)
> - 配置文件：src/config/email.config.ts
> - 服务文件：src/services/email.service.ts
> - 调用方：src/services/auth.service.ts 的 registerUser 方法
> 
> 测试账号已配置，.env.local中包含：
> SMTP_HOST=smtp.gmail.com
> SMTP_PORT=465
> SMTP_USER=xxx@gmail.com
> SMTP_PASS=[app-specific-password]
> 
> 请分析为什么邮件发不出去。
```

```bash
# 窗口2：修复分页
cd ~/projects/my-fullstack-app
claude --worktree fix-pagination

# 在Claude Code中输入：
> Bug描述：商品列表API的第二页返回空数据。
> 
> API端点：GET /api/products?page=2&limit=20
> 实际返回：{ data: [], total: 150, page: 2 }
> 
> 期望返回：第21-40条商品数据
> 
> 相关文件：
> - src/services/product.service.ts — listProducts 方法
> - src/controllers/product.controller.ts — 处理分页参数
> 
> 数据库有150条商品数据，数据库是PostgreSQL。
> 请分析分页逻辑的错误。
```

```bash
# 窗口3：修复Dashboard性能
cd ~/projects/my-fullstack-app
claude --worktree fix-dashboard-perf

# 在Claude Code中输入：
> Bug描述：管理后台Dashboard页面加载时间超过10秒。
> 
> 页面路径：src/app/admin/dashboard/page.tsx
> 数据获取：页面使用多个并行的Prisma查询
> 数据量：约5000条订单、2000条用户、500条商品
> 
> 请分析性能瓶颈，特别是检查是否存在N+1查询问题，
> 并给出优化方案。优化目标：页面加载时间降到2秒以内。
```

#### 三个Agent的典型分析过程

**Agent 1（邮件Bug）的发现**：
```typescript
// src/services/email.service.ts — 问题代码
const transporter = nodemailer.createTransport({
  host: config.smtp.host,
  port: config.smtp.port,  // ← 这里读的是 587 (STARTTLS)
  secure: false,           // ← 但Gmail SMTP 465需要 secure: true
  auth: {
    user: config.smtp.user,
    pass: config.smtp.pass,
  },
})

// 修复方案
const transporter = nodemailer.createTransport({
  host: config.smtp.host,
  port: 465,
  secure: true,  // ← 修复：465端口必须用SSL
  auth: {
    user: config.smtp.user,
    pass: config.smtp.pass,
  },
  // 增强可靠性：添加连接超时和重试
  connectionTimeout: 10000,
  greetingTimeout: 10000,
  socketTimeout: 15000,
})
```

**Agent 2（分页Bug）的发现**：
```typescript
// src/services/product.service.ts — 问题代码
async listProducts(page: number, limit: number) {
  const skip = page * limit  // ← BUG: page=2时 skip=40，跳过了第21-40条
  const products = await this.prisma.product.findMany({
    skip,
    take: limit,
  })
  return products
}

// 修复方案
async listProducts(page: number, limit: number) {
  const skip = (page - 1) * limit  // ← 修复：page=2时 skip=20，正确跳过第一页
  const products = await this.prisma.product.findMany({
    skip,
    take: limit,
    orderBy: { createdAt: 'desc' },
  })
  return products
}
```

**Agent 3（Dashboard性能）的发现**：
```typescript
// src/app/admin/dashboard/page.tsx — 问题代码
// N+1查询：先获取所有订单，然后循环查询每条订单的用户信息
const orders = await prisma.order.findMany({ take: 100 })
for (const order of orders) {
  order.user = await prisma.user.findUnique({
    where: { id: order.userId }  // ← 100次额外查询！
  })
  order.items = await prisma.orderItem.findMany({
    where: { orderId: order.id }  // ← 又100次！
  })
}

// 修复方案：使用 include 一次性获取关联数据
const orders = await prisma.order.findMany({
  take: 100,
  orderBy: { createdAt: 'desc' },
  include: {
    user: {
      select: { id: true, name: true, email: true }  // 只选需要的字段
    },
    items: {
      include: {
        product: {
          select: { id: true, name: true, price: true }
        }
      }
    }
  }
})
// 从 201 次查询 → 1 次查询，性能提升约 200 倍
```

### 4.4 合并与验证

```bash
# 回到主分支
cd ~/projects/my-fullstack-app
git checkout main

# 按优先级合并（P1先合并）
git merge fix-email-verification
git merge fix-pagination
git merge fix-dashboard-perf

# 最终验证：让Claude Code运行完整测试
claude
> 请运行完整的测试套件，确认所有修复没有引入回归。
> 特别验证：
> 1. 邮件发送测试是否通过
> 2. 分页查询第二页是否有数据
> 3. Dashboard页面查询性能是否改善
```

### 4.5 清理Worktree

```bash
# 清理已合并的Worktree
git worktree remove .claude/worktrees/fix-email-verification
git worktree remove .claude/worktrees/fix-pagination
git worktree remove .claude/worktrees/fix-dashboard-perf

# 删除已合并的分支
git branch -d fix-email-verification fix-pagination fix-dashboard-perf

# 或者一键清理所有已合并的Worktree
git worktree prune
```

---

## 第五部分：调试排障速查表

### 常见错误类型与Claude Code应对策略

| 错误类型 | 收集方法 | Claude Code提示模板 |
|----------|----------|---------------------|
| 编译/构建错误 | `npm run build 2>&1` | "构建失败，错误如下：[粘贴]。请分析并修复" |
| 运行时崩溃 | `node --enable-source-maps app.js` | "应用崩溃，堆栈如下：[粘贴]。请追踪根因" |
| 测试失败 | `npm test -- --verbose` | "测试[名称]失败：[粘贴输出]。请修复使测试通过" |
| 性能问题 | `console.time()` / Chrome DevTools | "此操作耗时[X]ms，请分析性能瓶颈并优化" |
| 内存泄漏 | `node --inspect` + Chrome Memory | "疑似内存泄漏：[描述现象]。请检查事件监听器和闭包" |
| 类型错误 | `npx tsc --noEmit` | "TypeScript报类型错误：[粘贴]。请修复类型定义" |
| API 500错误 | 服务端日志 | "API端点[X]返回500：[粘贴日志]。请分析并修复" |
| 数据库错误 | Prisma查询日志 | "数据库查询错误：[粘贴]。请检查Schema和查询逻辑" |

### 关键快捷命令

```bash
# 会话管理
/compact          # 压缩上下文，释放token空间
/compact [指令]   # 带保留指令的压缩
/clear            # 清空会话，从头开始
/context          # 查看当前上下文状态
/model            # 切换模型（Opus/Sonnet/Haiku）

# 调试相关
/review           # 审查当前代码变更
/init             # 初始化项目配置
/vim              # 切换Vim编辑模式

# Worktree操作
# 通过 --worktree 标志或在会话中请求创建
claude --worktree <name>     # 启动Worktree会话
git worktree list            # 查看所有Worktree
git worktree prune           # 清理无效Worktree
```

---

## 常见问题与解决方案

### Q1：Worktree创建失败 "already exists"

```bash
# 错误：fatal: 'fix-auth-bug' already exists
# 解决：先清理旧的Worktree
git worktree list
git worktree remove .claude/worktrees/fix-auth-bug
# 或者强制删除
git worktree remove --force .claude/worktrees/fix-auth-bug
```

### Q2：调试会话上下文被意外压缩，丢失了关键信息

```text
# 解决：利用记忆系统持久化关键发现
> 请将以下调试发现保存到记忆中：
> - 根因分析：[描述]
> - 修复方案：[描述]
> - 已修改文件：[列表]

# 然后安全地压缩
> /compact

# 压缩后记忆中的信息仍然可用
```

### Q3：多个Worktree的npm install冲突

```bash
# 每个Worktree需要独立的node_modules
cd .claude/worktrees/fix-auth-bug
npm install

# 如果磁盘空间紧张，使用符号链接共享依赖
ln -s ../../node_modules node_modules  # 仅在确认无冲突时使用
```

### Q4：Claude Code在调试时修改了不该改的文件

```text
# 预防：明确限制修改范围
> 请只修改以下文件来修复这个Bug：
> - src/services/auth.service.ts
> - src/config/auth.config.ts
> 不要修改任何其他文件。

# 恢复：如果已经误改
> 请撤销对 src/lib/utils.ts 的修改，使用 git checkout 恢复它
```

### Q5：并行Agent之间如何通信

Claude Code的每个Agent实例是独立的会话，不能直接通信。但可以通过以下方式间接协作：

```bash
# 方式1：共享文件（在主分支上）
echo "Agent1: 已确认auth Bug根因是JWT过期" > .claude/debug-notes.md

# 方式2：使用Git commit信息
git commit -m "WIP: auth bug - found root cause in token refresh logic"

# 方式3：利用CLAUDE.md传递信息（主分支修改会反映到所有Worktree）
```

---

## 工作流程总览

```text
flowchart TB
    subgraph "调试准备"
        A[收集错误信息] --> B[编写CLAUDE.md]
        B --> C[准备精准提示词]
    end

    subgraph "并行调试（Worktree模式）"
        C --> D{Bug数量?}
        D -->|单个| E[直接在主分支调试]
        D -->|多个且独立| F[创建多个Worktree]
        F --> F1[Worktree 1: Bug A]
        F --> F2[Worktree 2: Bug B]
        F --> F3[Worktree 3: Bug C]
    end

    subgraph "调试循环"
        E --> G[结构化描述Bug]
        F1 --> G
        F2 --> G
        F3 --> G
        G --> H[Claude分析根因]
        H --> I[应用修复]
        I --> J[运行测试]
        J --> K{通过?}
        K -->|否| L[反馈失败 → 返回H]
        K -->|是| M[/review 审查]
    end

    subgraph "合并与收尾"
        M --> N[合并到主分支]
        N --> O[运行完整测试]
        O --> P[保存调试记忆]
        P --> Q[清理Worktree]
    end

    style F fill:#e3f2fd
    style G fill:#fff3e0
    style M fill:#e8f5e9
```

---

## 训练营适用性评估

| 训练营类型 | 适用性 | 教学时长 | 建议安排 |
|------------|--------|----------|----------|
| AI编程入门营 | ⭐⭐ 中等 | 2小时 | 只讲调试五步法，Worktree部分作为选修 |
| Claude Code实战营 | ⭐⭐⭐⭐⭐ 极高 | 4小时 | 完整教学，包含并行调试实战项目 |
| 企业级AI开发营 | ⭐⭐⭐⭐ 高 | 3小时 | 侧重生产环境故障排查和Worktree团队协作 |
| 全栈开发训练营 | ⭐⭐⭐ 中高 | 3小时 | 结合具体技术栈（如Next.js）讲解调试流程 |
| DevOps/SRE训练营 | ⭐⭐⭐⭐ 高 | 2.5小时 | 侧重生产环境调试和性能优化场景 |

**教学建议**：
- 调试部分建议现场演示真实Bug修复过程，效果远超PPT讲解
- Worktree部分需要确保学员的Git版本 ≥ 2.5，提前准备好练习仓库
- 分组练习：3人一组，每人负责一个Worktree，模拟团队并行开发

---

## 参考来源

1. [Run parallel sessions with worktrees - Claude Code Docs](https://code.claude.com/docs/en/worktrees) — Anthropic官方Worktree功能文档，涵盖 `--worktree` 标志、子Agent隔离和清理机制
2. [Claude Code Cheat Sheet - Shortcuts, Commands, Tips (2026)](https://computingforgeeks.com/claude-code-cheat-sheet/) — ComputingForGeeks整理的完整命令速查表，包含70+命令和CLI标志
3. [Debugging with Claude Code: A Practical Workflow (2026)](https://stacknotice.com/blog/claude-code-debugging-workflow-2026) — StackNotice的调试实战指南，涵盖上下文提供、错误迭代和Hooks应用
4. [Claude Code Git Worktree Isolated Workflow - Medium](https://medium.com/@porter.nicholas/claude-code-git-worktree-isolated-workflow-555f0121ff73) — Porter Nicholas关于Worktree隔离工作流的深度实践分享
5. [Context Window & Compaction - DeepWiki](https://deepwiki.com/anthropics/claude-code/3.3-context-window-and-compaction) — Claude Code上下文窗口管理与自动压缩机制的源码级分析

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
