2.5 高效调试心法 🟢
阅读完本节后,你将会收获:
- 掌握高效的 AI 调试沟通公式
- 学会如何提供完整的错误日志和上下文
- 理解循环修复模式,持续迭代直到问题解决
- 了解"让 AI 自己 build"的终极大招
序言中提到的"调试心法":提供完整报错日志和循环修复模式。
前置知识
什么是 调试
调试(Debug)是发现并修复代码错误的过程。
什么是 错误日志
错误日志(Error Log)是程序崩溃或异常时输出的详细信息,包含错误类型、位置、堆栈等。
什么是 堆栈
堆栈(Stack Trace)是错误发生时的函数调用链,显示错误是从哪一行代码、哪个函数、一层层调用产生的。它能帮你追溯错误的源头。
调试沟通公式:完整日志 + 操作步骤 + 预期结果
场景:项目报错了,你不知道怎么办
你复制了最后一行错误信息给 AI:(❌ 低效)
"报错了,帮我看看"AI 问你:"什么报错?怎么操作的?"——来回 3 轮才进入正题。
高效做法:一次性给全信息(✅)
我运行 pnpm dev 启动项目,终端报错:
[完整错误日志]
我预期的结果是:开发服务器正常启动,能在 localhost:3000 访问
帮我分析并修复这个问题为什么这样更有效:
| 你给的信息 | AI 能做的 | 节省的轮数 |
|---|---|---|
| 只说"报错了" | 追问细节 | +2 轮 |
| 给最后一行 | 猜测上下文 | +1 轮 |
| 给完整日志 | 直接定位问题 | 0 轮 |
循环修复模式:
第一轮没解决?正常。继续给新日志:
按你的方法改了,现在出现新的错误:
[新错误日志]
请继续分析通常 2-3 轮解决,不要放弃。
循环修复模式:
终极大招:让 AI 自己 Build
场景:报错一堆,你不想逐个排查
你改了代码,构建失败。错误信息 50 行,不知道从哪开始。
直接甩给 AI:
bash
"请帮我运行 pnpm install && pnpm build,如果遇到错误请自行修复,直到构建成功"然后你去喝杯咖啡。
为什么有效:
- AI 直接看到真实错误,不用你转述
- 小问题(版本冲突、缺失依赖)AI 自己解决
- 你看结果就行
适用场景:
| 场景 | 为什么适合 |
|---|---|
| 接手新项目 | 不知道项目结构,让 AI 自己探索 |
| 报错太多 | 逐个排查太慢,让 AI 并行处理 |
| CI/CD 挂了 | 本地复现不了,让 AI 在本地跑 |
注意事项:
- ✅ 先
git commit,AI 改坏能回滚 - ✅ 第一次可能慢,耐心等待
- ⚠️ AI 陷入死循环(来回改同一处)→ 及时打断
实战案例
案例 1:类型错误
错误日志:
Type error: 'user' is possibly 'undefined'.
at App (app/page.tsx:15:10)❌ 错误描述:
"类型错误了,帮我看看"✅ 正确描述:
TypeScript 报错:
文件: app/page.tsx
行号: 15
错误: 'user' is possibly 'undefined'
代码:
const user = await getUser();
return <div>{user.name}</div>; // line 15
如何处理可能为 undefined 的情况?AI 分析:
user 可能为 undefined,需要:
1. 添加类型检查
2. 提供默认值
3. 或使用可选链案例 2:运行时错误
错误日志:
Error: connect ECONNREFUSED 127.0.0.1:5432
at Connection.<anonymous> (node_modules/pg/lib/client.js:89:17)
at Socket.emit (events.js:315:13)❌ 错误描述:
"数据库连接失败"✅ 正确描述:
数据库连接错误:
错误: connect ECONNREFUSED 127.0.0.1:5432
环境:
- 开发环境
- PostgreSQL 应该在本地运行
- .env 中 DATABASE_URL="postgresql://localhost:5432/mydb"
可能的原因:
1. PostgreSQL 没有启动?
2. 端口不对?
3. .env 配置错误?AI 分析:
ECONNREFUSED 表示服务未运行。
检查:
1. PostgreSQL 是否启动
2. 端口是否正确(默认 5432)
3. 运行命令检查:
Mac/Linux: brew services list
Windows: sc query postgresql-x64-[version]案例 3:构建错误
错误日志:
✘ [ERROR] Could not resolve "./components/Button"
app/page.tsx:3:24:
3 │ import { Button } from "./components/Button";
╩ ~~~~~~~~~~~~~~~~~~~~
This file does not exist.❌ 错误描述:
"构建失败了"✅ 正确描述:
构建错误:
Could not resolve "./components/Button"
文件位置: app/page.tsx:3:24
import { Button } from "./components/Button";
实际情况:
- 项目使用 shadcn/ui
- Button 组件应该在 components/ui/button.tsx
如何修复导入路径?常见错误模式速查
| 错误类型 | 典型信息 | 解决方向 |
|---|---|---|
| 类型错误 | Type 'X' is not assignable to type 'Y' | 检查类型定义,使用类型断言或修改类型 |
| 空值错误 | Cannot read property 'X' of undefined | 添加空值检查、可选链、默认值 |
| 导入错误 | Module not found: Can't resolve 'X' | 安装依赖、修正路径、检查导出 |
| 网络错误 | ECONNREFUSED / ENOTFOUND | 检查服务状态、URL、网络连接 |
| 端口占用 | Address already in use :3000 | 关闭占用端口的进程或换端口 |
| 权限错误 | EACCES / Permission denied | 检查文件权限,使用 sudo 或更改权限 |
| 语法错误 | Unexpected token / SyntaxError | 检查语法拼写,注意括号引号匹配 |
核心理念
调试是医生诊断的过程。
记住:
- 完整日志:不要删减,堆栈信息很重要
- 操作步骤:说明你做了什么才触发错误
- 预期结果:告诉 AI 你想要什么
- 循环修复:不要放弃,通常 2-3 轮解决
- 反馈结果:每次修复后告诉 AI 新情况
调试公式:
完整错误日志
+ 操作步骤(你做了什么)
+ 预期结果(你想要什么)
= 快速解决方案终极大招公式:
git commit 保存现场
+ 让 AI 自己运行 build
+ 遇到错误让它自己修
= 省心省力相关内容
- 前置:2.2 VibeCoding工作流详解
