摘要: 使用ChatGPT排查代码报错时,如果只发送最后一行错误提示或一小段代码,往往很难得到准确答案。运行环境、完整日志、关联代码、最近改动和预期结果,都会直接影响排查方向。本文整理向ChatGPT描述代码问题时必须提供的5类信息,减少反复修改和越修越乱的情况。

很多开发者遇到代码报错后,会直接把错误提示复制给ChatGPT:

这段代码为什么报错?帮我修一下。

ChatGPT很快就会给出原因分析和修改方案。有时第一次就能解决,但更多时候会出现另一种情况:

  • 按照建议修改后,原来的错误没有消失;
  • 第一个报错修好了,又出现新的报错;
  • ChatGPT反复让你安装不同版本的依赖;
  • 修改后的代码不报错了,但功能还是不正常;
  • 对话进行了很多轮,排查方向却越来越乱。

这不一定说明ChatGPT不会排错。

很多时候,真正的问题是开发者提供的信息不完整。ChatGPT只能根据有限内容推测原因,而同一个错误提示,在不同环境、不同项目和不同调用方式下,可能对应完全不同的问题。

一、没有提供完整错误日志

排查代码问题时,很多人只复制最后一行报错。

例如只发送:

ModuleNotFoundError

或者:

TypeError: Cannot read properties of undefined

这些信息只能说明最后发生了什么,却不一定能说明问题从哪里开始。

完整错误日志通常还包含:

  • 出错文件;
  • 出错行数;
  • 函数调用顺序;
  • 具体变量;
  • 上一层异常;
  • 依赖加载过程;
  • 请求路径和状态码。

有些错误真正的原因可能出现在日志前半部分,最后一行只是前面问题引发的结果。

例如数据库连接失败后,后续变量没有正常赋值,最终出现空对象错误。如果只把最后一行发给ChatGPT,它可能会让你增加空值判断,却没有发现数据库根本没有连接成功。

正确做法

向ChatGPT发送报错时,尽量提供:

  • 从错误开始到结束的完整日志;
  • 报错文件名和行号;
  • 执行了什么操作后出现问题;
  • 不要随意删除看似无关的提示。

如果日志特别长,可以先让ChatGPT判断哪些部分最关键,而不是直接截取最后一句。

二、没有说明运行环境和版本

同一段代码在不同环境中,运行结果可能完全不同。

例如:

  • Python 3.9和Python 3.12;
  • Node.js 18和Node.js 22;
  • Java 8和Java 17;
  • Windows和Linux;
  • 本地环境和Docker容器;
  • 开发环境和生产服务器。

有些语法、依赖和接口,只在特定版本中可用。

如果开发者没有说明环境,ChatGPT可能根据常见版本给出解决方案,但这个方案并不适合当前项目。

常见情况包括:

  • 推荐的依赖版本与项目不兼容;
  • Windows路径写法放到Linux后失效;
  • 新版本已经删除旧接口;
  • 项目使用旧框架,但ChatGPT按照新框架回答;
  • 本地全局安装了依赖,服务器中却没有。

至少要提供这些信息

  • 操作系统;
  • 编程语言版本;
  • 框架版本;
  • 主要依赖版本;
  • 使用的运行方式;
  • 是否在Docker、虚拟环境或服务器中运行。

例如,不要只说:

Python项目启动失败。

可以改成:

项目运行在Windows 11,Python版本是3.11,使用FastAPI,执行启动命令后出现以下错误。

信息越明确,ChatGPT越容易缩小排查范围。

三、只发送局部代码,没有关联上下文

很多报错表面上出现在当前文件,真正原因却可能在其他位置。

例如一个接口读取不到用户信息,问题可能出现在:

  • 前端没有传递Token;
  • 请求拦截器没有执行;
  • 后端中间件没有解析Token;
  • 用户字段名称不一致;
  • 数据库查询返回空值;
  • 权限配置拦截了请求。

如果只把接口中的几行代码发送给ChatGPT,它只能围绕当前代码进行修改。

结果可能是不断增加判断、修改变量或捕获异常,却始终没有解决真正的问题。

多文件项目应该补充什么

除了报错位置,还应提供:

  • 调用当前函数的代码;
  • 当前函数调用的其他方法;
  • 相关数据结构;
  • 接口请求参数;
  • 配置文件中的相关部分;
  • 前后端约定的字段名称。

不需要一次性把整个项目全部发给ChatGPT,但至少要让它看见完整的调用链路。

还可以先这样提问:

请先判断这个报错可能涉及哪些文件和依赖关系,不要立即修改代码。

这样可以避免ChatGPT一开始就把排查范围限制在某一个文件中。

四、没有说明最近修改了什么

代码昨天还能运行,今天突然报错,通常说明项目最近发生了变化。

可能包括:

  • 更新了依赖;
  • 修改了配置文件;
  • 调整了字段名称;
  • 切换了代码分支;
  • 合并了其他人的代码;
  • 更换了数据库;
  • 修改了环境变量;
  • 升级了运行环境。

但很多人向ChatGPT提问时,只描述当前报错,不说明报错出现之前做过什么操作。

缺少这部分信息后,ChatGPT只能从所有可能原因中逐个猜测,排查效率自然很低。

更有效的描述方式

可以直接告诉ChatGPT:

这个功能之前正常。今天把字段userName改成了username,同时更新了用户模型和登录接口,修改后出现以下错误。

这句话能够立即把排查重点放在字段同步、数据结构和调用位置上。

排错时,“最近发生了什么变化”往往比“现在报了什么错误”更重要。

五、没有说清楚预期结果

有些代码并没有报错,但运行结果不符合需求。

例如:

  • 接口返回成功,但数据没有保存;
  • 页面可以打开,但内容显示错误;
  • 程序没有异常,但执行速度很慢;
  • 登录成功后又被跳回登录页;
  • 查询能够完成,但返回的数据不完整。

如果只告诉ChatGPT“这段代码有问题”,它并不知道你想得到什么结果。

它可能通过增加异常捕获让程序不再报错,但实际业务问题并没有解决。

描述问题时要说明三个结果

  1. 当前结果是什么;
  2. 预期结果是什么;
  3. 在哪一步出现差异。

例如:

当前接口返回200,但数据库没有新增记录。我希望提交表单后创建一条用户数据,并返回新用户ID。

有了明确目标后,ChatGPT才能判断问题是在接口响应、数据库事务、数据校验还是保存逻辑中。

为什么ChatGPT容易把代码越修越乱

当信息不足时,ChatGPT通常会根据最常见的情况给出一个可能的修改方案。

如果第一次猜错,开发者又把修改后的新错误发给它,它会继续根据新的局部信息进行调整。

经过几轮修改后,项目中可能逐渐出现:

  • 重复的异常处理;
  • 多余的类型转换;
  • 不必要的依赖;
  • 新旧方法同时存在;
  • 临时绕过问题的判断;
  • 与原有架构不一致的代码。

这时即使最终不报错,代码也可能已经偏离原来的设计。

因此,连续修改两三次仍然没有解决时,不要继续让ChatGPT叠加补丁。应该回到最初状态,重新整理完整信息,再进行一次系统排查。

向ChatGPT提问时可以使用这个模板

遇到代码问题时,可以按照下面的结构整理:

项目功能:
我正在实现什么功能。

运行环境:
操作系统、语言版本、框架版本和主要依赖。

当前现象:
执行什么操作后出现了什么问题。

完整报错:
粘贴完整错误日志和报错位置。

相关代码:
提供报错文件、调用方和关联数据结构。

最近改动:
问题出现前修改了哪些文件、依赖或配置。

预期结果:
程序原本应该实现什么效果。

排查要求:
请先分析最可能的原因和排查顺序,不要直接大范围重写代码。

这个模板的重点不是让提问变得更长,而是减少无效猜测。

排查代码报错时的正确顺序

让ChatGPT协助排错时,可以按照以下顺序进行:

第一步:先分析原因

要求ChatGPT根据现有信息列出最可能的三到五个原因,并说明每个原因应该如何验证。

第二步:先验证,不要马上改代码

通过日志、版本、配置和变量值判断是哪一种原因。

第三步:只修改最小范围

确定原因后,只修改相关文件,避免一次性重构整个模块。

第四步:重新运行原有流程

修复当前错误后,还要检查原来的功能是否正常。

第五步:查看代码差异

通过Git Diff确认ChatGPT到底修改了什么,有没有加入无关代码或删除原有逻辑。

ChatGPT和Codex分别适合做什么

在代码排错场景中,两者适合处理的任务有所不同。

ChatGPT更适合:

  • 分析报错原因;
  • 解释错误日志;
  • 整理排查顺序;
  • 对比多个解决方案;
  • 帮助理解代码逻辑。

Codex等项目级编程工具更适合:

  • 读取多个关联文件;
  • 搜索字段和方法引用;
  • 修改项目代码;
  • 执行测试;
  • 检查多文件改动。

如果问题只涉及一段代码,直接使用ChatGPT通常已经够用。

如果问题涉及多个文件、依赖关系和完整项目,仅靠反复复制局部代码,排查效率通常会比较低。

总结

ChatGPT排查代码报错总是修不好,很多时候不是模型能力不够,而是缺少判断问题所需的信息。

最需要提供的5类内容是:

  • 完整的错误日志;
  • 运行环境和版本;
  • 关联代码和调用上下文;
  • 最近进行过的修改;
  • 当前结果与预期结果。

代码排错不是看到错误后立即修改,而是先收集信息、定位原因,再进行最小范围调整。

把信息提供完整,ChatGPT才能从“猜测答案”变成真正协助排查问题。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐