跳到主要内容
造物笔记

Vibe Coding 调试策略集

12 招排查策略,从贴报错到 Deep Debug,按成本逐级升级。

🎯 看懂报错并逐步定位问题
核心收益:更从容地把每次卡住变成进步
展开章节目录 (21 节)
💡 本篇核心导读调试不是编程的副作用。掌握方法后,每条报错都是系统递来的线索。

策略全景图:十二招在手,Bug 不愁

一句话速览

#策略一句话一句话:大白话版
1.1让 AI 自己查不描述问题,直接让 AI 自查代码中的错误。"你再检查一遍,看看有没有问题。"
1.2直接丢错误把终端/控制台的报错信息完整贴给 AI。"这个报错啥意思?帮我修。"
1.3直接丢截图页面显示异常说不清楚,截图丢给 AI。"你看这个页面,哪出问题了?"
2.1代码审查让 AI 系统性通读整个模块的代码逻辑和调用关系。"帮我从头到尾审一遍这段代码。"
2.2查看日志在关键节点加日志,追踪数据流转和异常点。"帮我加几行打印,看看数据走到哪断了。"
2.3Deep Debug假设驱动的科学调试法:列出假设→交叉验证→确认根因→最小化修复。"别着急改,先猜 5 个原因,一个一个验证。"
3加上测试用测试用例把"什么是正确的"锁死,让 AI 在测试框架下修复。"先写测试证明这有 Bug,再修。"
4.1调研最佳实践调研市面上的开源方案和行业做法,对比选择最优解。"别人遇到过这问题吗?他们怎么解决的?"
4.2换个模型当一个 AI 反复陷入死循环,换另一个模型从不同角度分析。"这 Bug 换个脑子来看看。"
5.1回滚代码修了 30 分钟还没好,果断回到上一个正常版本,复盘重做。"修乱了,回去,重新来。"
5.2完善文档后重做不是代码的问题,是需求没说清楚。停下来,把规格写清楚再让 AI 写。"问题出在需求上,先把需求文档重新理一遍。"
6打印变量最朴素但最万能的方法:把关键变量的值打印出来看。"不知道哪错了?先把数据打出来看看。"

梯度图:从零成本到深水区

解决一个 Bug 的正确姿势不是"随便挑一个方法试试",而是从成本最低的方法开始,逐级升级。下面的梯度图帮你找到起点:

🟢 零成本区(10 秒出招,张口就来)
    │
    ├── 1.2 直接丢错误        ← 终端有报错?先贴再说
    ├── 1.3 直接丢截图        ← 页面有问题?截图丢过去
    └── 1.1 让 AI 自己查       ← 感觉不对劲?让它自查
    │
    ▼ 如果没解决...
    │
🟡 轻量区(花 2–5 分钟,加点引导)
    │
    ├── 6    打印变量          ← 不知道数据在哪断了?打出来看
    ├── 2.1  代码审查          ← 让 AI 更大范围地通读代码
    ├── 2.2  查看日志          ← 加日志追踪数据流和时间线
    └── 5.1  回滚代码          ← 修了半小时越来越乱?回去重来
    │
    ▼ 如果还没解决...
    │
🟠 深度区(10–30 分钟,需要方法论)
    │
    ├── 2.3  Deep Debug       ← 科学调试:假设→验证→根因→修复
    ├── 3    加上测试          ← 用测试锁死正确行为,防止反复
    └── 5.2  完善文档后重做    ← 承认需求没写清,重新来
    │
    ▼ 如果依然无解...
    │
🔴 外援区(换思路,不换问题)
    │
    ├── 4.1  调研最佳实践      ← 市场上别人怎么解决的?
    └── 4.2  换个模型          ← 让另一个 AI 从零开始审查

快速决策:看着现象找方法

不用读完整篇文档,看到什么现象,直接用对应策略:

你遇到了...第一反应如果不行
终端/控制台有红色报错➜ 1.2 贴错误给 AI➜ 2.1 代码审查
页面白屏、样式崩了、按钮不见了➜ 1.3 截图丢给 AI➜ 6 打印变量
功能不对,但说不清哪错了➜ 6 打印变量,看数据流➜ 2.3 Deep Debug
AI 说"没问题",但你感觉不对➜ 1.1 "请你更认真地查一遍"➜ 2.1 代码审查
同一个 Bug 修了 3 次还在➜ 5.1 回滚,复盘,重做➜ 5.2 完善文档重做
一个 Bug 反复出现(修好了过几天又坏)➜ 3 加上测试锁死➜ 2.3 Deep Debug 找根因
数据算错了、金额不对、结果错误➜ 6 打印变量➜ 3 加上测试
环境/配置/依赖问题➜ 1.2 贴错误➜ 手动检查 .env 和版本
不确定自己的方案是否最优➜ 4.1 调研最佳实践➜ 4.2 换个模型
一个 Bug 花了 30 分钟还没头绪➜ 5.1 回滚代码➜ 4.2 换个模型

开篇:为什么调试能力是 Vibe Coder 的第一护身符

Vibe Coding 和传统编程最大的区别是:你不需要从零写每一行代码,但你依然需要面对海量的报错、意外行为和"明明感觉说清楚了但就是不对"的情况。

用数据来说话:一堂 Vibe Coder 的实际项目统计里,60%–70% 的时间不是在写功能,而是在调试。剩下那 30%–40%,才是真正"建东西"的时间。

所以这不是锦上添花的技巧,这是生存技能。

这篇文档的目标很简单:让你从"看到报错就慌"变成"看到报错就笑"——不是笑它可怕,而是笑它逃不出你的排查套路。


一、心态篇:在学方法之前,先搞定你的大脑

1.1 这五个真相,每天默念一遍

真相一句话解释
Vibe Coding 的日常就是报错一个中等复杂度的项目,一天遇到 10–20 次报错是正常水平,不是你的问题。
报错是信息,不是审判报错信息是系统在告诉你"我哪里不懂",不是在骂你"你不行"。
没有修不了的 Bug只要你愿意用正确的方法逐层排查,99% 的 Bug 都是可解的。
慢就是快花 5 分钟系统排查,好过花 2 小时盲目乱改。快不一定对,对才是真的快。
你不需要一个人扛AI 是你的搭档,不是你的对手。把错误丢给它、让它帮你分析,本身就是 Vibe Coding 的工作方式。

1.2 调试时最容易犯的四个心态错误

恐慌模式:"完了完了,怎么又报错了"——然后开始疯狂让 AI "修一下""再修一下""不对再修一下"。结果是越修越乱。

正确做法:先停下来,读一遍报错信息。至少看懂"错在哪一行、什么类型的错误"再让 AI 动手。

甩锅模式:"这肯定是 AI 的问题"——不读报错,不分析原因,直接换模型、换提示词。

正确做法:AI 写的东西出问题,原因可能是你的需求没说清楚。先检查"我描述清楚了吗",再怀疑"AI 写错了吗"。

跳跃模式:"这里改一下试试……不行……那里改一下……还不行"——没有假设地盲目试错。

正确做法:每改一次之前,先在心里说"我怀疑问题是 X,所以我要改 Y 来验证"。如果验证失败,这条线索就排除了,换下一条。

绝望模式:"这个 Bug 修了三个小时了,我感觉自己是废物"——把技术问题上升到自我评价。

正确做法:三个小时修不好一个 Bug,在专业程序员的世界里是日常。站起来走一圈,回来从第一步重新梳理。你不是废物,你只是还没找到根因。


二、分类篇:先搞清楚你的敌人是谁

在动手之前,先学会给 Bug 分类。不同类的 Bug,排查策略完全不同。用错了方法,费时费力还没结果。

2.1 三大 Bug 类型

🟡 类型一:环境和配置问题

是什么:代码本身没问题,但运行的环境"不对"——缺依赖、版本冲突、端口被占、环境变量没配、路径写错。

典型症状

  • Module not found / Cannot find module
  • command not found
  • port already in use
  • .env 里的变量读不到
  • "在我电脑上能跑,换到服务器就不行"

面对 Vibe Coding 的排查策略

  1. 直接贴报错给 AI,说"帮我看看是不是环境问题"
  2. 让 AI 列出项目需要的依赖,逐个检查是否已安装
  3. 检查 Node/Python 版本是否匹配项目要求
  4. 检查端口占用lsof -i :端口号
  5. 检查 .env 文件是否存在、变量名是否拼写正确

最常见的坑:本地装了全局包,远程没装。或者 npm install 的时候漏了 --save

🔵 类型二:程序和语法问题

是什么:代码写错了——语法错误、类型不匹配、引用未定义的变量、拼写错误、括号没闭合。

典型症状

  • SyntaxError / Unexpected token
  • TypeError: xxx is not a function
  • ReferenceError: xxx is not defined
  • 代码编辑器里有红色波浪线
  • 运行就崩溃,一眼能看出问题

面对 Vibe Coding 的排查策略

  1. 打开 IDE 的问题面板,看红色/黄色的提示
  2. 直接贴报错截图给 AI,说"这行的语法有什么问题"
  3. 如果是 TypeScript 类型错误,让 AI"检查类型定义和传参是否匹配"
  4. 让 AI 对比报错行和附近的代码,检查是否有拼写错误或遗漏的括号

最常见的坑:复制粘贴代码时漏了一个括号、单引号和双引号混用、变量名多打了一个字母。

🔴 类型三:逻辑和缺陷问题

是什么:代码语法正确、能跑起来,但行为不对——结果算错了、条件判断漏了、边界情况没处理、数据流转断了。

典型症状

  • 页面能打开,但数据显示为空或错误
  • 点击按钮没反应,或者反应不对
  • 某个功能"有时好有时坏"
  • 数据存到数据库了,但内容和预期不一样
  • 没有报错,但结果明显不对

面对 Vibe Coding 的排查策略

  1. 先复现:精确描述"做了什么操作、期望看到什么、实际看到什么"
  2. 加日志打印关键变量:在怀疑的代码路径上加 console.log
  3. 让 AI 做代码审查:让 AI 从入口到出口通读一遍数据流转
  4. 写测试用例:用测试框住预期行为,让 AI 在测试框架下修复

最常见的坑:异步操作的顺序问题(A 还没返回,B 就用上了 A 的结果);空值和 undefined 的边界处理;数组索引从 0 开始的认知偏差。

2.2 快速分类判断表

下次遇到 Bug,先花 10 秒问自己三个问题:

判断问题如果是 → 类型优先用什么方法
代码能跑起来吗?不能 → 🟡环境或🔵语法贴报错给 AI
报错信息清楚吗?清楚 → 🔵语法IDE 问题面板
能跑但结果不对?是 → 🔴逻辑加日志 + 写测试

三、Vibe Coding 十大调试策略(一堂实战版)

以下策略不是"选一个用",而是"按顺序用"——先低成本排查,再逐步深入。就像探案:先看监控,再问证人,最后才动现场。


策略一:让 AI 自己检查 —— 最低成本的"自愈"

这是 Vibe Coding 最独特、最省力的调试方法。你不用懂技术细节,只需要学会"怎么说"。

1.1 让它自己查

核心话术:不用描述 Bug 是什么,直接让 AI 自查。

一句话版 → "你检查一下代码,看看有没有问题"
认真版 → "你认真看一遍所有文件,看看有没有写错的地方,有的话直接改掉"
刨根问底版 → "你把整个项目从头到尾仔细看一遍,一个文件一个文件看,逻辑对不对、有没有漏掉的情况、该处理的特殊情况处理了没,有问题全改掉"

为什么有效:AI 在生成代码时可能"注意力分散",让它重新审视一遍自己的产出,往往能发现 70% 以上的表面问题。

经验

  • 加上"认真""精细""逐一"这样的副词,效果显著提升——这会让 AI 进入更仔细的检查模式
  • 对于超过 300 行的项目,让 AI "按文件逐个检查",而不是一次全看
  • 如果 AI 说"没发现问题"但实际有问题,换到策略二的"深度检查"

适用场景

  • 刚写完一段代码,不确定有没有低级错误
  • 修改了一个地方,担心影响其他地方
  • 代码能跑但感觉"不干净"

1.2 直接丢错误

核心话术:把终端里的报错信息完整复制给 AI。

一句话版 → "报了这个错:[粘贴]"
加前因版 → "我跑项目的时候报了这个错:[粘贴],你帮我看看哪出问题了,直接修掉"
带上下文版 → "[粘贴] 我是做了 X 操作之后报的错。帮我搞清楚到底是哪的事,然后把有关的代码都查一遍,修掉"

为什么有效:报错信息里通常包含了"错误类型 + 出错位置 + 调用栈",AI 看到这些信息能快速定位。

关键点

  • 不要筛选报错,完整的调用栈(Stack Trace)最有价值
  • 告诉 AI 你做了什么操作,帮助它复现上下文
  • 如果错误太长,至少保留"第一行的错误类型"和"最后几行的位置信息"

适用场景

  • 终端/控制台有明显的红色报错
  • 代码编译失败
  • 接口返回非预期状态码(404/500 等)

1.3 直接丢截图

核心话术:截图 + 一句话描述。

一句话版 → "[截图] 这个问题怎么修?"
带指引版 → "[截图] 你看控制台这个报错,帮我看看是哪的事"
沉着冷静版 → "[截图] 页面白屏了,控制台报这堆东西。你先帮我猜猜可能是哪几种原因,然后一步一步试,试一步确认没问题了再往下走"

为什么有效:有些错误发生在浏览器 UI 层面——页面布局错乱、按钮不见了、样式崩了——文字描述很难说清楚,截图是最直接的方式。

适用场景

  • 页面显示异常(但控制台无报错)
  • 浏览器 DevTools 的网络面板/控制台截图
  • 移动端适配问题
  • UI 组件的视觉 Bug

策略二:深度检查 —— 当"自愈"不够时的升级打法

如果策略一(让 AI 自查)没解决问题,说明这个 Bug 不是表面问题,需要系统性地排查。

2.1 代码审查:让 AI 帮你从头到尾看一遍

核心思路:不让 AI 只看报错的那一行,而是让它通读整个模块的代码逻辑。

话术模板

第一步:框定范围
"帮我看看 [文件名/功能模块] 这段代码写得怎么样,重点帮我盯一下 [你怀疑的方向]"

第二步:系统检查
"帮我从这几个角度看看有没有问题:
1. 数据怎么走的:从哪进来的、中间怎么处理的、最后输出啥
2. 漏没漏检查:该判空的地方判了没、该兜住的特殊情况兜了没
3. 边边角角:数据为空的时候、没值的时候、各种意外情况,都处理了吗
4. 调用关系:这段代码用了哪些别的地方的东西、传过来的格式对不对得上"

第三步:找到问题
"帮我找出至少 3 个可能有问题的地方,严重的直接帮我改掉"

为什么有效:很多 Bug 不是"代码写错了",而是"不同模块之间的约定不一致"。A 模块返回的是数组,B 模块以为返回的是对象——两个模块单独看都没错,放一起就崩了。代码审查能发现这种"模块间的误会"。

适用场景

  • Bug 能稳定复现但报错位置不明确
  • 多个功能之间有数据依赖
  • 重构后出现了新问题

2.2 查看日志:让系统自己说出真相

核心思路:在关键节点加日志,让 AI 帮你分析日志。

话术模板

第一轮:加日志
"帮我在几个重要的地方加上 console.log,打印出 [变量名] 的值,标清楚是从哪打印的"

第二轮:跑一遍
(运行项目,触发 Bug,把日志输出贴给 AI)

第三轮:分析日志
"这是跑出来的日志,你帮我看看数据走到哪一步出问题了。重点看 [你怀疑的地方]"

实战案例

# 假设一个"用户登录后看不到数据"的 Bug

你让 AI 加日志:
- 登录成功后 → 打印 "登录成功,user_id: xxx"
- 请求数据前 → 打印 "请求数据,token: xxx"
- 收到响应后 → 打印 "收到响应,status: xxx, data: xxx"

日志输出:
登录成功,user_id: 123
请求数据,token: undefined  ← 这里断了!
收到响应,status: 401, data: null

一目了然:token 丢了,所以请求被拒绝。

适用场景

  • 数据流转问题("数据去哪了")
  • 异步操作顺序问题
  • 接口调了但不知道请求是否成功

2.3 Deep Debug:科学调试法 —— 像侦探一样破案

这是最高阶的调试方法,也是专业程序员和"乱改党"的分水岭。它来自一堂核心技术资产——科学调试技能(Deep Debug Skill),核心理念只有一句话:

你观察系统的次数越多,修改系统的次数就越少。

直觉式调试和科学式调试的区别:

❌ 直觉式:看到问题 → 快速猜测 → 修改代码 → 祈祷有效
✅ 科学式:看到问题 → 提出假设 → 交叉验证 → 确认根因 → 最小化修复

直觉式调试之所以会失败,是因为人类在调试时有五种认知偏差:

偏差表现怎么破
首因效应第一个想到的原因就死磕不放动手前列出至少 5 个可能的假设
确认偏差只看支持自己猜想的证据主动找"反驳自己"的证据
沉没成本已经花了 2 小时,必须走到底提前设好验证标准,不通过就换路
修改偏见第一反应就是改代码先用日志、历史记录、静态分析做观察
局部最优修复了表面现象,根因还在连问 5 次"为什么"

六步科学调试法:

第 1 步:定义问题(5W 框架)

不要模糊地说"有问题",要用 5 个 W 精确描述:

W要回答的问题示例
What什么现象?"点击提交按钮后页面白屏"
When何时发生?"每次提交都发生,还是第一次正常第二次崩溃?"
Where在哪里发生?"本地正常,部署到 Vercel 后崩溃"
Who谁受影响?"所有用户还是只有特定账号?"
How如何触发?"填写表单 → 点击提交 → 白屏,精确到每一步"

关键原则:量化描述。 不要说"很慢",要说"页面加载需要 5 秒,预期 1 秒"。不要说"数据不对",要说"字段 X 显示 null,预期显示字符串"。

第 2 步:生成假设(不少于 5 个)

把可能的原因分成六类,逐个生成假设:

问题现象:表单提交后白屏
    │
    ├─ 数据流假设:提交的数据格式和后端要求的不匹配
    ├─ 控制流假设:提交后触发了某个未处理的异常分支
    ├─ 时序假设:异步请求还没返回,后续代码就开始执行了
    ├─ 依赖假设:某个第三方库版本更新导致兼容性问题
    ├─ 资源假设:API 接口限流或超时
    └─ 环境假设:生产环境的环境变量和本地不一致

生成假设的两个技巧:

  1. 5 Why 追问:从现象一层层往下问

    症状:表单提交后白屏
    Why 1? → API 返回了错误
    Why 2? → 请求的 Content-Type 不对
    Why 3? → 用了 FormData 但后端期望 JSON
    Why 4? → 一开始没约定好数据格式
    Why 5? → 需求文档里没写接口规范
  2. 逆向思考:问"什么情况下 Bug 不会出现?"

    正常:本地开发环境 OK,线上失败 → 怀疑环境差异
    正常:旧数据 OK,新数据失败 → 怀疑数据格式变化
    正常:单个请求 OK,连续请求失败 → 怀疑状态未重置
第 3 步:优先级排序

不是所有假设都值得先验证。按两个维度排:

高影响 ┃  H1(立即验证)┃  H2(尽快验证)┃
       ┃  可验证性高    ┃  可验证性低    ┃
━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋
低影响 ┃  H4(有空再验)┃  H3(标记观察)┃
       ┃  可验证性高    ┃  可验证性低    ┃

优先验证"高影响 + 高可验证性"的假设——能用日志或 Git 历史就能验证的,不要先去改代码。

第 4 步:交叉验证(最关键的一步)

核心原则:单一证据可能误导你,至少用 3 种不同的方法交叉验证同一个假设。

只有日志 → 可能日志本身写错了
只有代码 → 可能代码有误导性
日志 + 代码 + Git 历史 → 三条独立线索指向同一个结论,信心大增

四种验证方法:

方法具体操作Vibe Coding 话术
时间线分析用 Git 看最近改了什么"帮我看看最近几天改了哪些代码,哪次改动可能跟这个 Bug 有关"
日志模式识别分析日志的时间和频率规律"帮我把报错日志按时间排一下,看看有没有什么规律"
静态代码分析画出函数调用链"帮我画一下从用户点按钮到最后数据回来,中间经过了哪些步骤"
数据状态验证检查数据库/存储中的数据"帮我写个查询,看看数据库里有没有不对劲的数据"
第 5 步:确认根因

不要停在"直接原因",要追问到"根本原因":

症状:页面白屏
  ↓
直接原因:API 返回 500 错误
  ↓
根本原因:数据库连接池耗尽
  ↓
深层原因:没有配置连接超时和重试机制

只修复"直接原因"(比如加个 try-catch 把错误吃掉),问题还会以另一种方式出现。修到"根本原因",同类问题才不会再犯。

第 6 步:最小化修复

修复的范围要精确匹配问题的范围:

原则说明
精确匹配改一个函数能解决的,不要改整个模块
可逆性用 Git commit 保留回滚点,修坏了能秒回
添加防护修完 bug 顺手加一行日志或断言,下次再出问题秒定位
测试覆盖先写一个能复现 Bug 的测试用例,修完验证测试通过

Vibe Coding 话术

"问题终于找到了,就是 [X] 的问题。现在帮我改 [文件名] 里的 [具体位置],只改这一个地方,别的文件都别动。改完之后帮我按原来出错的操作步骤再试一遍,看看还有没有问题。"

独立技能文件:Deep Debug 的完整方法论也保存为独立技能文件,可直接导入支持 Skill 的工具(如 WorkBuddy、Claude Code)中使用。源码仓库中的文件位于 docs/reference/SKILL:科学调试DeepDebug_SKILL.md


策略三:加上测试 —— 让 Bug 无处可逃

核心思路:与其修完 Bug 再验证"好了没有",不如先用测试把"什么是正确的"定义清楚。

话术模板

一句话版 → "帮我给这个功能写个测试,看看它跑得对不对"
加场景版 → "帮我把这个页面的主要功能都写成测试,正常情况跑一遍、出问题的情况也跑一遍"
锁死版 → "先帮我写个测试证明这个 Bug 真的存在(让它跑失败),然后我再让你修代码,修完之后再跑一次测试看看通过没。修完了再多补几个测试,把各种可能出错的情况都兜住,防止下次再坏"

什么时候必须加测试:

  • 一个 Bug 修了两次以上还反复出现
  • 修改了一个被多处调用的核心函数
  • 上线前做最后检查
  • 数据计算逻辑(金额、库存、权限等关键业务)
  • 异步流程(登录、支付、文件上传等)

对 Vibe Coder 来说,测试最重要的价值是:告诉 AI"不改这个功能也能通过",避免 AI 在修一个 Bug 时破坏了另一个功能。


策略四:外部支持 —— 当一个人的智慧不够用时

4.1 调研最佳实践

核心思路:你遇到的问题,大概率已经有人解决过了。让 AI 帮你调研。

话术模板

第一步:看看别人咋做的
"帮我搜一下,别人遇到 [这个问题] 都是怎么解决的?找 2-3 种常见的方法,跟我说说哪种好哪种不好"

第二步:找现成的
"有没有人类似的问题已经解决了?帮我找来参考参考"

第三步:定方案
"我是做 [什么样的项目],你觉得刚才那些方法里,哪种最适合我?为什么?"

适用场景

  • 遇到一个从未见过的问题类型
  • 不确定自己的方案是不是最优解
  • 想确认"是不是有更简单的办法"

4.2 换个模型帮忙

核心思路:不同的 AI 模型有不同的"思维方式"。当一个模型反复陷入同一个错误时,换一个模型可能一眼就看出问题。

使用方法

  • Claude / GPT 擅长代码推理和架构设计 → 适合做代码审查和逻辑分析
  • Gemini 有超长上下文 → 适合审查跨多个文件的大型项目
  • 不同的 Agent 有不同的工具配置和审查角度 → 适合交叉验证

话术模板

"这个 Bug 我已经让别的 AI 修了 3 次了都没搞定。你帮我重新看看这代码,别管之前怎么修的,就当第一次见,从头帮我找找问题到底在哪。"

重要提示:换模型不是为了"找一个能猜对的",而是为了获得不同角度的分析。最终还是要你自己理解问题并确认修复方案。


策略五:回滚重做 —— 有时候后退才是前进

5.1 回滚代码

核心思路:当你发现自己在一个 Bug 上花了 30 分钟以上、改了好几次但越来越乱——立刻回滚。

话术模板

第一步:退回去
"把我代码退回到 [上次正常能跑的时候],不要现在的改动"

第二步:复盘
"帮我看看从那次到现在我们都改了啥?哪些改动可能导致现在的问题?"

第三步:重新来
"行,咱们重新来。这次慢一点,改一步就试一步,确认没问题了再改下一步"

什么时候必须回滚:

  • 已经连续修了 30 分钟以上还没好
  • 修了一个 Bug 又冒出 3 个新 Bug
  • 不确定哪个改动导致了当前状态
  • 感觉代码"越来越乱了"

Vibe Coding 的回滚优势:和传统编程不同,Vibe Coding 重新生成的成本极低。如果一段代码修了 3 次还不行,让 AI 根据原始需求重新生成,往往比反复修补更高效。

5.2 完善文档后重做

核心思路:很多 Bug 的根因不在代码,而在"一开始就没说清楚"。停下来,把需求、接口、数据流重新梳理清楚,然后让 AI 基于清晰的文档重新实现。

话术模板

第一步:承认问题
"这段代码改来改去都不对,我怀疑是我一开始就没说清楚到底要做什么"

第二步:重新说清楚
"帮我重新理一下这个功能到底要干嘛,说清楚:
- 用户怎么操作的(先干嘛、再干嘛、最后看到什么)
- 数据怎么走的(前端传什么、后端处理成什么、最终存成什么)
- 各种意外怎么办(网断了咋办、数据是空的咋办、用户连点两下咋办)
- 前后端怎么传数据(用什么方式、传什么参数、返回什么结果)"

第三步:重做
"好了,就按刚才写清楚的这个要求,帮我重新做一遍。别自己发挥,就按这个来。"

适用场景

  • 一个功能反复修改,每次都觉得"快好了",每次都发现新问题
  • 需求本身很模糊,"做一个好看的页面"这种级别的描述
  • 多个模块之间的数据约定不一致

策略六:打印变量 —— 最简单的万能方法

核心思路:当一切分析都模糊不清时,回到最朴素的方法——把数据打出来看。

话术模板

第一轮:加打印
"帮我在下面这些位置各加一行 console.log:
- 每个函数刚开始的地方:把所有传进来的值打印出来
- 每个 if/else 里面:打印一下进了哪个分支
- 数据改完之后:打印改之前和改之后的值
- 每个函数最后 return 之前:打印最终要返回的值"

第二轮:跑一遍,贴给 AI
"这是代码跑出来打印的东西:
[粘贴输出]
你帮我看看哪个地方的数值不对"

第三轮:修
"问题出在 [这个地方],帮我修一下"

真实案例:一个同学做一个购物车功能,发现结算金额永远是 0。让 AI 加了几个 console.log,发现是"商品价格从后端返回的是字符串 "99",前端做加法时变成了字符串拼接而不是数字相加"。一行打印,一秒定位。

适用场景

  • 一个"万能方法",几乎所有 Bug 排查都可以先加打印试试
  • 数据相关的 Bug(金额、数量、状态)
  • 不确定代码是否执行到了某个分支
  • 条件判断的走向不明

四、调试策略速查表

当你遇到 Bug 不知道怎么开始时,按这个表走:

你看到的现象先用哪个策略不行再用哪个
终端/控制台有明确报错策略 1.2:直接丢错误策略 2.1:代码审查
页面显示异常但没报错策略 1.3:直接丢截图策略 6:打印变量
功能行为不对,说不清哪错了策略 6:打印变量策略 2.3:Deep Debug
AI 自查说"没问题"但你感觉不对策略 1.1:让它更认真查策略 2.1:代码审查
修了 3 次还没好策略 5.1:回滚代码策略 5.2:完善文档重做
不确定是不是自己的方案有问题策略 4.1:调研最佳实践策略 4.2:换个模型
一个 Bug 反复出现策略 3:加上测试策略 2.3:Deep Debug
数据对不上、计算结果错误策略 6:打印变量策略 3:加上测试
环境/配置/部署问题策略 1.2:丢错误手动检查 env 和依赖

五、调试报告模板

当你需要和其他人(或未来的自己)沟通一个 Bug 时,用这个模板:

## Bug 报告: [一句话描述]

### 1. 问题定义
- **时间**:YYYY-MM-DD HH:mm
- **环境**:本地开发 / 测试环境 / 线上生产
- **症状**:[量化的问题描述,如"页面加载 8 秒 vs 预期 1 秒"]
- **复现步骤**:
  1. 打开 [页面/功能]
  2. 执行 [操作]
  3. 观察 [实际结果 vs 预期结果]

### 2. 排查过程
- H1:[假设 1] → [验证方法] → ❌ 排除 / ✅ 确认
- H2:[假设 2] → [验证方法] → ❌ 排除 / ✅ 确认
- H3:[假设 3] → [验证方法] → ❌ 排除 / ✅ 确认

### 3. 根因
- 症状:[表面现象]
- 直接原因:[什么代码/配置出了问题]
- 根本原因:[为什么这个代码/配置会出问题]

### 4. 修复
- **改了什么**:[文件 + 行号 + 具体变更]
- **为什么这样改**:[逻辑说明]
- **测试验证**:[如何验证修复有效]

### 5. 预防
- **同类问题如何避免**:[加测试?加日志?改流程?]

六、总结:记住这五句话就够了

  1. 遇到报错先别慌——贴完整的报错信息给 AI,让 AI 先自查,这是 Vibe Coding 的第一反应。
  2. 说不清的 Bug 先加日志——把关键数据打印出来,让数据替你说话。
  3. 修了 3 次没好就回滚——不要在不理解问题的情况下反复修补,重新来往往更快。
  4. 复杂的 Bug 用 Deep Debug——先假设、再验证、确认根因后再下手修,不要猜。
  5. 修完 Bug 加测试——今天修好了不代表以后不会再犯,用测试把正确行为锁死。

最后想说的:调试不是编程的"副作用",它是编程本身。每一个你修掉的 Bug,都是你对系统理解加深一步的证据。Vibe Coding 给了你 AI 这个搭档,也给了你前所未有的排查效率。学会调试,你就真正拥有了"做出任何东西"的能力。