관리
← 文章列表

让Codex复现错误:整理最小复现案例与环境信息

本文在AI辅助下由原文翻译而成。请结合原文核对专业术语和公式。

如果只向Codex提出“帮我修复错误”,它可能会把不同的失败当成同一个问题。首先需要说明,是程序无法启动、特定输入下计算错误,还是只有画面显示不同。好的复现资料并不取决于说明的长度,而在于是否包含能在其他执行中确认相同失败的条件。

让Codex复现错误:整理最小复现案例与环境信息 — 原创概念示意图
原创概念示意图

本文介绍先复现错误,再请求修复和验证的方法,不以特定模型或付费方案为前提。下面的代码和日志格式是为说明而编写的示例,并非实际项目的执行结果,也不是本博客读者的错误记录。需要区分Codex提出了修改建议与错误实际上已经解决这两种状态。

从错误复现到修复验证

1 → 区分输入、步骤、预期与观察结果

2 → 在相同代码与运行环境下复现

3 → 编写保留失败条件的小型案例

4 → 确认相关输入并做最小修改

5 → 再次对照相同的失败输入与正常输入

1. 将错误报告分成四栏

先写明输入、运行步骤、预期结果和观察结果。输入是引发问题的资料,例如文件或函数参数;步骤是处理这些资料的顺序。预期结果是希望遵守的规则,观察结果是实际画面或输出。如果没有写明预期结果,就很难判断消除了异常的修改是否属于正确行为。

栏目 用于说明的填写示例 应避免的表述
输入 数量栏中一个空格字符 输入了奇怪的值
步骤 用该字符串调用示例函数 直接运行了
预期 将其视为空的数量值 应该正常
观察 此次运行出现的异常及其位置 大概是转换错误

这里的观察栏应填写自己实际运行得到的结果。如果从网上复制未经确认的错误信息,可能会复现另一种失败。没有日志时,应将观察结果标为未确认,先请求简短的复现过程。可能的原因应写在单独的栏目中,避免把它们作为已确认的观察结果传达。

2. 从可能改变结果的项目开始整理运行环境

准备工作目录、操作系统、语言运行时、依赖锁定文件、运行命令和当前代码版本。如果是网页画面问题,可以补充浏览器、画面尺寸等相关条件。与其冗长地列出所有设备信息,不如选择重新制造失败所需的条件。版本应使用在当前环境中确认的值,而不是安装说明中写的数字。

遇到“在我的电脑上可以运行”的情况,应以相同栏目比较成功环境与失败环境。先确认代码版本、运行目录和输入文件是否相同,可以逐步缩小差异范围。不要照抄其他环境的命令,应以该项目说明的运行步骤为准。

如果复现需要账号信息,应先考虑能否制作保留失败条件的示例资料,而不是把真实密码或令牌像普通文本一样直接贴上。例如,可以将客户标识符替换为虚构值,但保留字符串长度或空格等错误条件。如果这种替换可能影响结果,也要在复现说明中注明。

3. 最小案例应保留失败条件,而非只追求文件数量少

下面是一个用于说明的Python函数,用来处理数量字符串。它将空字符串视为空值,但仅含空格的字符串会进入另一条路径。这里并不假定它是实际产品中的错误,而是用它来说明如何整理哪些输入应按同一类型处理的规则。

def parse_quantity(text):
    if text == "":
        return None
    return int(text)

如果将要求规定为“空字符串与仅含空格的字符串均返回None,数字字符串转换为整数,字母输入报错”,复现和验证的范围就明确了。现在可以分别确认“只修复了空格输入”和“同时保留了数字输入的原有行为”这两项主张。如果实际产品的空值规则不同,应先修改规则本身。

在大型项目中缩减案例时,应先删除无关画面或数据,并在每次删除后确认相同失败是否仍然存在。如果缩减后错误消失,删除的条件中可能包含相关因素。目标不是得到最短的代码,而是得到同时保留失败与预期行为的小型资料。记录缩减过程本身,也能为回到原项目提供依据。

4. 先请求复现结果,再进行修改的提示词

在第一次请求中,同时写明工作顺序与完成标准。下面是为上述函数案例自行编写的请求格式。文件路径和命令应填写实际项目的值;仅仅提交示例文字,并不意味着Codex已经访问该环境或执行了命令。

请先阅读相关代码,并按照提供的输入与步骤复现错误。在修改前,分别记录预期结果和观察结果,同时留下实际运行命令、退出状态和关键输出。如果无法复现,请在修改代码前说明缺少的环境条件。如果能够复现,请编写确认该失败的小型检查,提出最小修复方案,并使用相同输入再次确认。

这个请求并不是要求所有错误都必须新建测试文件的规则。如果需要反复确认计算或输入处理是否发生回归,自动检查会很有用。如果只是临时的环境设置问题,观察相关条件并确认恢复情况可能更合适。应选择能确认出错路径的证据,而不要把检查文件的数量当作成果。

让Codex复现错误:整理最小复现案例与环境信息 — 展示文章要点的原创示意图
展示文章要点的原创示意图

OpenAI的代码现代化示例展示了一种流程:使用相同输入比较输出与行为,发现差异后进行小幅修改,再次验证。提示词指南也强调修改后进行实际检查。本文的请求格式是将这些原则应用于小型错误的写作示例,并非官方产品菜单,也不是规定必须使用的提示词。

5. 同时验证失败输入与正常输入

在数量示例中,可以分别检查空字符串、空格、数字和非数字字符。如果为了处理空格而将所有转换异常都改为None,字母输入也可能被悄悄置为空值。若实际要求是让字母输入报错,这样的修改即使减少了异常,也改变了规则。

用于说明的输入 规定的预期结果 检查目的
空字符串 None 保留原有空值规则
仅含空格的字符串 None 处理失败条件
字符串12 整数12 维持正常转换
字符串abc 转换错误 不掩盖无效输入

每项检查都应分别写明修改前与修改后的结果。如果修改前只检查空格输入,修改后却只检查数字,就无法对照确认是否修复了相同失败。两次运行的代码和输入也应按照相同标准对齐。如果尚未确认结果变化的原因就删除失败检查,可能会丢失用于确认回归的资料。

6. 规定无法复现时应停下的位置

无法复现时,应检查差异,而不是宣布成功。逐项比较运行目录、输入文件编码、依赖、当前设置和代码版本中可能改变结果的因素。如果原本的失败是间歇性的,可以记录运行次数以及成功、失败的条件,但不能凭任意一次成功就认定没有问题。

如果Codex无法执行命令,应将执行限制与代码分析结果分开理解。从代码中找到可能的原因虽有帮助,但不能替代复现证据。可以要求在最终回答中分别列出“通过静态分析找到的候选原因”“实际复现”“修改后确认”以及“未能确认的条件”。

如果缩减数据后能够复现,但原服务中仍有额外失败,应确认两个问题之间的联系。不要将小型案例的成功扩大解释为整个服务的成功。最小案例是帮助理解原因的工具;要判断实际问题已经解决,还需要确认原来的失败路径。

7. 阅读结果文件与修改内容的顺序

工作结束后,先阅读复现记录,再确认修改了哪些文件。然后对照相同失败输入的修改后结果与正常输入的结果。最后阅读未能执行的检查和剩余的不确定性。即使回答很长,只要缺少这四类证据,仍可以再次请求所需结果。

例如,报告写着“所有检查均通过”,却没有实际命令或检查对象,就应询问究竟确认了哪些条件。反过来,即使只执行了一项小型检查,只要明确确认了实际错误路径,在该范围内也能成为有用证据。如果需要扩大确认范围,应说明其必要性并指定额外条件。

复现记录的文件名可以附上代码版本或运行序号。如果用同一个文件覆盖修改前与修改后的输出,就会失去比较依据,因此应分别保存。发生异常的行会随着代码修改而移动,所以最好同时留下行号与对应的函数名称。

回退修改时,应区分工作开始前的状态与此次修改。如果用户已经修改的文件与Codex的修改混在一起,应先比较修改内容,而不是整体恢复。审查修复方案与实际应用到服务的阶段也应分开。请求复现错误,是建立原因与修复依据的起点。

官方来源与编写标准

资料确认日期:2026-10-06。本文是AI根据实际打开的官方资料编写的说明。另行标明的计算、代码与检查案例仅用于说明,并非直接测试用户环境或实际测量的结果。在准备发布的阶段,已再次检查功能与官方资料是否发生变化。

为帮助理解本文而制作的原创插画。

Tistory 原文 ↗