排查 GitHub Copilot 的 C++ 现代化改造问题

本文可帮助你解决在使用 GitHub Copilot 现代化功能升级 C++ 项目时遇到的常见问题。 如果遇到此处未涵盖的问题,请在Visual Studio中使用 help>Send Feedback>report 问题

在您开始之前

验证您的解决方案或项目能够成功生成

对于 MSVC 升级方案,代理通过生成解决方案或项目来验证更改。 如果在开始之前解决方案或项目已中断,代理将很难将预先存在的问题与升级引入的问题区分开来。

如果已知生成问题,请在 自定义说明中记录这些问题,在代理在评估阶段请求上下文时在响应中提供它们 scenario-instructions.md ,或将它们添加到其中,以便代理知道忽略它们。

提交或暂存未提交的工作

从干净的工作目录开始。 代理会在工作过程中提交更改,而将未提交的更改与代理所做的修改混在一起,会使审查或回退这些更改变得更加困难。

git stash
git status

备份非 Git 存储库

代理还可以使用不在源代码管理下的文件夹。 如果项目不在 Git 存储库中,代理将跳过分支和提交操作。 在开始之前备份项目文件夹,以便根据需要还原它。

Tip

请考虑在开始之前初始化本地 Git 存储库,即使未推送到远程存储库。 这样,你就可以回滚单项更改,并逐步跟踪进度。

Example:

git init
git add
git commit -m "Initial Commit"

当你和代理都完成后,如果你不想继续使用 git,只需确保当前工作树中的代码是你想要的,然后删除你运行 git init 的目录中的 .git 目录。

常见问题

代理未显示在 Copilot 对话助手 中

Symptoms:在GitHub Copilot聊天窗口中键入 @Modernize 不会激活代理,或者Modernize不会显示在 解决方案资源管理器 上下文菜单中。

解决方法

  1. Help>About Microsoft Visual Studio 中确认 Visual Studio 的版本为 18.7 或更高版本。
  2. 通过检查状态栏中的Copilot图标来验证GitHub Copilot是否处于活动状态。
  3. 检查是否已在Tools>Options>GitHub>Copilot>C/C++中启用该功能。 然后选择 启用 GitHub Copilot 的 C++ 现代化
  4. 更改设置后重启Visual Studio。

代理停滞在循环中

症状:代理反复尝试相同的修复,而不会取得进展。

解决方法

  • 使用Copilot 对话助手提示窗口中的“取消”按钮停止代理,描述在提示中观察到的内容,并发送提示以恢复代理。
  • 提供手动修复,并告知代理更改的内容。 代理会从更正中吸取教训。
  • 请让代理尝试其他方法。 例如,在GitHub Copilot聊天窗口中键入:“该修补程序不起作用。尝试其他策略。“
  • 如果需要,请还原或撤消上次更改,然后重启任务。

大型解决方案耗时过长

症状:升级包含许多项目的大型解决方案需要很长时间或似乎停滞不前。

解决方法

  • 从一个代表项目开始作为试点。 这能及早暴露系统性问题。
  • 通过在 .github/upgrades/{SCENARIO ID} 中查看 tasks.md 来监控进度。
  • 如果会话超时,请启动一个新会话。 代理从中断处继续。

恢复策略

撤消所有更改

如果使用 Git 分支进行升级,请撤消所有操作:

git checkout your-original-branch
git branch -D upgrade-branch

原始代码未更改。

撤消上一次更改

撤销最近一次提交:

git revert HEAD

或者告诉客服代表,Revert the last change.

从指定阶段重新开始

如果代理的计划不起作用,请通过发送类似于以下内容的提示从早期阶段重启:

  • Let's redo the plan. I want a different approach to the conformance issues.
  • Go back to the assessment and reconsider the upgrade strategy.

重新开始

.github/upgrades/{SCENARIO ID}删除文件夹,然后启动与代理的新对话。 它从头开始。

获取帮助

如果无法解决问题:

  1. 在 Visual Studio 中使用 帮助>发送反馈>报告问题
  2. 如果可能,包含来自.github/upgrades/{SCENARIO ID}execution-log.md内容。