跳到主要内容

AI 代码调试

AI 代码调试是借助编码 Agent 定位和修复缺陷的过程,缺陷可能来自既有代码,也可能来自 AI 刚生成的实现。允许使用 AI 的编码面试常以“修复失败测试”“找出并发代码中的错误”“审查并改进 AI 的实现”为题。本文讲调试的步骤、如何让 AI 参与,以及避免“连续重写却越改越乱”的方法。

1. 面试核心​

先记住这几条,再读正文
  • 调试顺序不变:先复现,再定位,提出可验证的假设,修复根因,最后回归。AI 加快阅读和尝试,但不能跳过复现和验证。卡 · 调试步骤
  • 给 AI 的信息是错误输出、失败输入、相关代码位置和期望行为;让它先解释原因,再修改代码。
  • 区分问题类型:环境问题、需求理解偏差、实现错误、测试本身错误。模型建议修改测试时,先判断测试是否违背需求。
  • 审查 AI 实现时从外部行为出发,构造会暴露问题的输入(失败配置、并发、边界值),用运行结果说明问题。卡 · 调试步骤
  • 上下文过长或模型反复出错时,回退到已知可用的版本,压缩或重开会话,带着明确的结论和约束重新开始。卡 · 常见陷阱

2. 调试步骤​

  1. 复现:运行失败的测试或复现步骤,确认环境正常、失败稳定。不稳定的失败先找出触发条件。
  2. 缩小范围:沿测试输入、调用链和关键状态定位到具体模块和函数。可以让 Agent 搜索调用关系、添加临时日志或断点输出。
  3. 提出假设:根据现象提出原因,例如“分页 offset 用了 page 而不是 page-1”。每个假设都要能被一次运行验证或否定。
  4. 修复根因:修改导致问题的机制,而不是在出错位置加特殊判断。修复范围尽量小。
  5. 回归:运行相关测试和更大范围的测试,检查 diff 中没有无关修改。为这次缺陷补一个测试,防止再次出现。
  6. 说明:能解释修复前后的行为差异和尚未验证的部分。

3. 让 AI 参与的方式​

环节AI 适合做人需要把关
复现运行测试、整理错误输出确认复现条件与线上一致
定位搜索调用链、阅读陌生代码、总结模块关系检查结论与代码是否一致
假设列出可能原因及验证方法选择优先验证的假设
修复编写修改、补测试判断是否修了根因,是否改了测试断言
回归运行测试、检查 diff判断测试覆盖是否足够

要求 Agent“先解释原因,再修改”有两个作用:解释错误时可以在写代码前纠正;解释正确时,修改更有针对性。

4. 常见陷阱​

  • 连续重写:一次失败后让模型整体重写,引入新问题。应该保留可用部分,只修改与假设相关的地方。
  • 改测试让它通过:删除断言、放宽比较、跳过用例。除非测试本身违背需求,否则不修改测试。
  • 只修症状:在出错位置加 if 特判,同类输入的其他路径仍然出错。
  • 上下文污染:多次失败尝试留在上下文中,模型被错误的中间结论误导。回退代码、总结已知事实后开启新会话往往更快。
  • 未验证的结论:模型说“问题已修复”,但没有运行测试。以运行结果为准。

5 · 面试题卡片​

5.1 面对陌生代码库和失败测试,如何借助 AI 定位并修复问题?​

出现公司:Meta、Amazon、去哪儿旅行

考察重点

  • 复现、定位、假设、修复、回归的顺序。
  • 测试是否应该修改的判断,以及修复范围。

相关内容:调试步骤、让 AI 参与的方式。

参考回答

先运行失败的测试,确认环境和失败位置。让 Agent 搜索测试调用的入口和相关模块,总结调用链,人检查它的总结是否和代码一致。把错误输出、相关代码和期望行为交给 Agent,要求先列出可能原因及验证方法,再逐个验证。

确认根因后做最小修改,运行相关测试,再根据影响范围做更大范围回归,检查 diff 中没有无关修改。如果 Agent 建议改测试,先判断测试是否违背需求,不能因为测试妨碍通过就删除断言。时间有限时优先修复影响面大的失败,最后说明修复前后的行为差异以及未验证的部分。

5.2 配置文件热更新任务中,如何发现并修正 AI 生成实现的问题?​

出现公司:阿里云

考察重点

  • 从外部行为定义正确性。
  • 构造失败输入验证问题,给出具体反馈。

相关内容:调试步骤、常见陷阱。

参考回答

先确定热更新的外部行为:支持哪些格式、修改后何时生效、解析失败时保留旧配置还是报错、读取方会不会看到半更新的状态、文件被频繁修改时如何处理。然后沿“文件变化 → 解析 → 校验 → 发布新配置”的链路审查实现。

例如发现解析失败前就覆盖了共享配置,就构造一个格式错误的文件,观察旧配置是否仍可用,然后把复现步骤、实际结果和期望结果反馈给模型,要求改为解析校验通过后再原子替换引用。修复后验证正常更新、错误配置和连续修改;是否需要并发测试取决于任务要求。

5.3 使用编码 Agent 时,上下文过长或模型反复出错,怎样把任务拉回正确方向?​

出现公司:安软、新旦智能、Stripe、阿里云

考察重点

  • 识别上下文污染和无效循环。
  • 回退、总结事实和重开会话。

相关内容:常见陷阱、上下文压缩。

参考回答

先停止让模型继续改。用版本控制回退到最后一个能通过测试的状态,保留已验证有效的部分。把已知事实整理成简短的说明:目标、约束、已确认的根因或已排除的假设、相关文件和复现命令。

然后压缩上下文或开启新会话,只带这份说明重新开始,避免之前错误的尝试和结论继续误导模型。要求模型先解释它对问题的理解再动手,把大任务拆成可单独验证的小步骤,每步运行测试。长期有效的约定写进仓库指令,下次不必重复说明。

6. 参考资料​