Debugging

使用 Claude Code 调试

使用计划模式、文件引用和精准提示词高效诊断和修复 Bug。

从计划模式开始

Shift + Tab 两次进入计划模式。Claude 将以只读方式探索你的代码库——非常适合在不意外修改任何内容的情况下进行诊断:

text
用户点击结账表单的提交按钮时出现
TypeError: Cannot read property 'id' of undefined。
从 @src/pages/Checkout.tsx 追踪调用链,
找出 user 对象可能为 undefined 的位置。

确定计划后,切换回普通模式来实施修复。

调试工作流

1. 复现并提供上下文

使用 @ 文件引用向 Claude 提供涉及的具体代码:

text
Bug:访客用户结账失败
预期:无需登录即可下单
实际:提交时出现 TypeError

相关文件:
@src/pages/Checkout.tsx
@src/hooks/useAuth.ts
@src/api/orders.ts

2. 深度分析

对于复杂的 Bug,明确说明需要分析的内容:

text
分析 @src/hooks/useAuth.ts 和
@src/api/orders.ts 之间的竞态条件。
订单有时在认证状态解析之前就提交了。

3. 用 TDD 修复

让 Claude 先编写一个失败的测试,然后实现修复:

text
在 @src/__tests__/ 中编写一个复现此 bug 的测试:
访客用户在结账提交时出现 TypeError。
然后修复代码使测试通过。
编写后不要修改测试。

4. 防止再次发生

text
既然我们修复了 Checkout 中的 user 空值 bug,
代码库其他地方是否存在类似的模式——
user 可能为 undefined 的情况?

使用回退撤销错误

如果修复让情况变得更糟,在输入框为空时按 Esc Esc 打开回退菜单。选择回退点后,再选择恢复方式:

  • 仅代码(撤销文件更改,保留对话)
  • 仅对话(保留代码,撤销最后一轮)
  • 两者都恢复(完全重置到该点)
  • 从该点向前 / 向后总结(压缩对话历史但保留主线)

调试提示词

  • 根因分析: 这个错误的可能根因有哪些?
  • 追踪流程: 追踪数据从 @src/api/users.ts 到组件的流转路径
  • 管道日志: tail -f app.log | claude -p "总结错误并建议修复方案"
  • 查找类似问题: 找出所有访问 .id 但没有空值检查的地方

为什么上下文对调试很重要?

使用 AI 进行有效调试的关键在于缩小搜索范围。@ 文件引用和计划模式直接控制进入上下文窗口的内容——这是一个基础的 Agent 设计模式。

了解提示词与结构化输出

延伸阅读

继续实践

使用 Claude Code 调试 的核心概念已经读完

如果你想把理解变成可复用的能力,可以到 AgentWay 继续练习