查找并修复代码中的 bug 可能会令人沮丧(尤其是在你是新开发人员时)。 值得庆幸的是,GitHub Copilot 等工具可以快速识别和消除 bug,让你可以专注于更具创造性、更有趣的工作。
先决条件
本文中的示例假定你正在使用 GitHub Copilot 在 Visual Studio Code(VS Code)中调试Python项目。 若要按照这些示例操作,需要:
- 参阅 Visual Studio Code 文档,完成使用 Copilot 设置 Visual Studio Code。
-
[Download Python](https://www.python.org/downloads/)。 - 安装 Python 扩展以用于 Visual Studio Code。
学习通过示例进行调试
尝试运行有 bug 的代码时,你会遇到两个主要情况:
- 代码在完成运行之前退出,并且你会收到一条错误消息。
- 代码运行时没有错误,但是输出与你预期的不同。
值得庆幸的是,Copilot 可以帮助在这两种情况下调试代码。 若要了解如何操作,请完成以下示例。
使用 GitHub Copilot 调试错误
运行有 bug 的代码时,你通常会收到一条错误消息。 该消息告知你发生错误的文件和行,并简要描述问题所在。 但是,错误消息可能会令人困惑。 若要充分理解并修复 bug,我们可以向 Copilot 寻求帮助。
让我们通过一个示例仓库试试看:。
克隆示例存储库
首先,需要创建该仓库的本地副本:
- 开始在 VS Code 中克隆 new2code/debug-with-copilot 存储库。
- 选择在计算机上保存存储库的位置,然后单击“选择为存储库目标”。
- 出现提示时,打开存储库。
运行存在 bug 的文件
接下来,我们运行 文件。 此程序模拟两名玩家之间的骰子对战。
-
在 VS Code 中,打开并查看 文件。
-
按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(Mac)打开命令面板。
-
输入 并按 Enter 键。
-
在终端选项卡中,粘贴以下命令。
Windows:
Shell py bugged_dice_battle.py
py bugged_dice_battle.pyMac 或 Linux:
Shell python bugged_dice_battle.py
python bugged_dice_battle.py -
按 Enter 运行程序。
遗憾的是,我们的终端显示了一些错误信息,并出现以下消息:
TypeError:只能将 str(而非“int”)连接到 str
调试文件
若要了解此错误的含义,请在VS Code中打开Copilot对话,然后粘贴并发送以下提示。
Explain in depth why my code produces the following error and how I can fix it: TypeError: can only concatenate str (not "int") to str
Explain in depth why my code produces the following error and how I can fix it:
TypeError: can only concatenate str (not "int") to str
Copilot 将响应出现错误,因为我们正尝试将整数 和 与字符串连接,而你只能将字符串与字符串连接。
然后,它还将提供更新的代码版本,该版本通过使用某函数在连接之前将整数转换为字符串,从而修复错误。 将 Copilot 的建议应用于文件,练习调试的最后一步。
使用 GitHub Copilot 调试不正确的输出
有时,有 bug 的代码运行时不会引发任何错误,但输出显然不正确。 在这种情况下,调试可能更加困难,因为 VS Code 无法告知你 bug 的位置或说明。
对于这些“不可见的”bug,Copilot 特别有用。 让我们通过示例仓库中的另一个文件来动手实践一下:。 这是一个用于计算阶乘的 Python 程序。
运行存在 bug 的文件
首先,我们来运行这个程序,看看它输出的错误结果:
-
打开并查看 文件。
-
在之前创建的终端中,粘贴以下命令。 Windows:
Shell py bugged_factorial_finder.py
py bugged_factorial_finder.pyMac 或 Linux:
Shell python bugged_factorial_finder.py
python bugged_factorial_finder.py -
按 Enter 运行程序。
遗憾的是,代码未按预期工作。 我们希望它返回 ,即 6 阶乘的正确值,但输出远高于此。
调试文件
为了了解出现了什么问题,open Copilot对话并发送以下提示:
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.
Copilot 将指出,由于我们使用的是该运算符,因此我们实际上是将某个值乘以另一个值。 换句话说,对于循环中的每次迭代,我们都会额外乘以一个。
若要修复此错误,Copilot 将建议删除公式中的多余部分,或将运算符更改为其他形式。 立即进行更改!
调试自己的项目
现在你已经练习过使用 Copilot 调试一些简单程序,那么可以用相同的方法查找并修复隐藏在自己工作中的错误。
例如,若要调试代码生成的错误消息,请向 Copilot 发送以下提示:
Explain in depth why my code produces the following error and how I can fix it: YOUR-ERROR-MESSAGE
Explain in depth why my code produces the following error and how I can fix it:
YOUR-ERROR-MESSAGE
除此之外,如果你要调试不正确的输出,请询问 Copilot 为什么输出不正确以及如何修复它。 为了获得最佳结果,请提供尽可能多的上下文,说明输出与你的期望有何不同。
借助这些策略,你完全有能力开始清除项目中的 bug 了!
后续步骤
随着你继续编码,你可能会遇到难以调试的特定问题场景和错误。 有关潜在问题的列表以及修复这些问题的示例 Copilot对话 提示,请参阅 AUTOTITLE。