在 Visual Studio 中使用 GitHub Copilot 调试应用

本文介绍如何使用 GitHub Copilot 更有效地进行调试。 Copilot 可提供代码修复,以及有关代码工作原理的深入分析和解释。 它有助于提供针对 bug 的建议修复,并解释异常等事项。 Copilot 能够理解调用堆栈、帧、变量名称和值。 因此,你可与调试器感知的 AI 进行交互,从而询问与代码相关的详细问题以及一般的调试问题。

此外,Copilot 为某些目标方案提供了更精确的帮助,例如:

  • 异常
  • 变量
  • 死锁
  • 快速操作(灯泡)

若要在这些场景中进行调试时获取 AI 帮助,请查找“询问 Copilot”“询问 Copilot”按钮的屏幕截图。按钮。 在这些场景中,Copilot 已知问题的上下文。 例如,它知道当前的调用堆栈、要询问的代码行以及异常的名称(如果发生了一个异常),因此无需在聊天中自行提供上下文。 Copilot 还提供了使用条件断点和跟踪点的建议。

有关 Visual Studio 中的 GitHub Copilot 扩展的详细信息,请参阅关于 Visual Studio 的 GitHub Copilot 扩展

先决条件

要开始,需要:

获取 AI 帮助以调试应用

以下简易示例演示如何使用内联聊天视图获取 AI 帮助。

注意

此外,还可通过选择视图 > GitHub Copilot 聊天以通过单独的聊天窗口来获取帮助。 有关详细信息,请参阅什么是适用于 Visual Studio 的 GitHub Copilot 聊天扩展?

启动调试会话

  1. 在 Visual Studio 中,创建新的 C# 控制台应用。

    在“开始”窗口上,选择创建新项目。 在搜索框中键入“控制台”,选择“C#”作为语言,然后对 .NET 选择“控制台应用”。 选择下一步。 键入项目名称(如 ConsoleApp_Copilot),然后选择“下一步”

    选择建议的目标框架或 .NET 8,然后选择“创建”。

    如果没有看到 .NET 的控制台应用项目模板,请转到工具>获取工具和功能,这会打开 Visual Studio 安装程序。 选择 .NET 桌面开发工作负载,然后选择修改

    Visual Studio 创建控制台项目,该项目显示在右窗格的解决方案资源管理器中。

  2. Program.cs 中的代码替换为以下代码:

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            int value = Int32.Parse(args[0]);
            List<String> names = null;
            if (value > 0)
                names = new List<String>();
    
            names.Add("Major Major Major");
        }
    }
    
  3. 右键单击以下语句,然后选择断点>插入断点

    int value = Int32.Parse(args[0]);
    
  4. 按 F5,或从“调试”菜单中选择“开始调试”

    应用会在断点处暂停。 “自动”窗口显示出 args 变量的值为 string[0]

    “自动”窗口的屏幕截图。

  5. 右键单击该代码,然后选择询问 Copilot 以打开内联聊天视图。

    提示

    或者,可以在“自动”或“局部变量”窗口中或数据提示中右键单击变量,然后选择询问 Copilot。 这为 Copilot 提供了变量名称和上下文,因此你不需要在聊天中自己提供上下文。

  6. 在内联聊天视图中键入以下问题:

    Why does the args variable have a value of string[0]?
    

    内联 Copilot 聊天的屏幕截图。

    Enter 时,Copilot 会根据对代码的理解来提供答案。 (你可能会看到不同于此处所示的响应。)

    Copilot 已回答问题的屏幕截图。

    如果 Copilot 为代码提供了建议的修复方法,则会为你显示。 如果没有,则可要求 Copilot 提供代码建议。

    提示

    在内联聊天中,使用“#”符号并从下拉列表中进行选择,将特定信息移交给 Copilot,同时在问题中引用该信息。 例如,如果选择部分代码,然后键入 #,则可以从 # 下拉列表中选择该所选内容。 还可以使用“#”符号来引用下拉列表中显示的 IDE 功能,例如“局部变量”窗口。

  7. 在此示例中,滚动到 Copilot 答案的末尾,然后在内联聊天窗口的末尾选择后续问题:“未向程序传递任何参数时,如何处理此情况?”

    Copilot 后续问题的屏幕截图。

    Copilot 会显示针对代码的建议修复方法。

    Copilot 建议修复方法的屏幕截图。

    如果要应用此代码修复方法,则请选择接受

  8. 选择取消,以便在下一节中继续学习 Copilot 的其他功能。

获取有关异常的 AI 帮助

以下简单示例演示如何在遇到异常时获取 AI 帮助,以及如何根据 AI 建议的解决方法快速更新代码。

启动调试会话

  • 在使用同一示例应用的调试器中暂停时,按 F11调试>单步执行可执行当前的语句。

    发生 IndexOutOfRangeException 并且应用暂停,显示异常。

    若要获取异常的 AI 帮助,请继续下一部分。

请求 AI 帮助

  1. 当应用程序因异常而暂停时,选择“询问 Copilot”按钮

    出现异常时“询问 Copilot”按钮的屏幕截图。

    如果尚未打开,则将出现 Copilot 聊天窗口,并提供错误及其发生原因的评估。 在此示例中,Copilot 标识了建议的代码修补程序、复制代码的按钮以及代码修补程序的“预览”按钮

    如果对异常有疑问,请在“询问 Copilot”文本框中进行询问。

  2. 选择预览按钮。

    Copilot 聊天窗口中“预览”按钮的屏幕截图。

    Visual Studio 显示代码预览,其中包含建议的解决方法。

  3. 查看建议的解决方法,然后选择“接受”以应用代码建议

    Visual Studio 中代码预览的屏幕截图。

  4. 重启调试程序。

    这一次未发生异常。 已解决此问题!

获取条件断点和跟踪点的 AI 帮助

Copilot 提供有关特定于代码的条件断点跟踪点的建议。

在此示例中,我们展示了 AI 对条件断点的建议。 对于跟踪点,AI 帮助以同样的方式工作。

  1. 单击当前断点或右键单击并选择“删除断点”,以删除当前断点。

  2. 替换以下代码行:

    names.Add("Major Major Major");
    

    替换为以下内容:

    // names.Add("Major Major Major");
    foreach (var item in args)
    {
       names.Add("Name: " + item);
    }
    
  3. names.Add("Name: " + item) 语句左侧,右键单击装订线,然后选择插入条件断点

  4. 选择表达式字段,Copilot 会开始处理建议。

    Copilot 处理条件断点建议的屏幕截图。

  5. 出现建议时,请选择一个(例如 item == "John")。 编辑建议,使名称为 Fred

    条件断点的 Copilot 建议的屏幕截图。

  6. 若要测试条件表达式,请执行以下操作:

    1. 在解决方案资源管理器中右键单击“ConsoleApp_Copilot”项目,然后选择“属性”。

    2. 选择“调试”>“常规”>“打开调试启动配置文件 UI”。

    3. 在“命令行参数”字段中,在三个单独的行上输入 5 Fred Joe

      为项目输入命令行参数的屏幕截图。

    4. 重启调试程序。

    当调试程序在断点处暂停时,请检查 item 的值,并验证当前值是否为 Fred

在 IEnumerable 表格可视化工具中获取 AI 帮助

有关 IEnumerable 表格可视化工具的 AI 帮助,请参阅 修改可视化工具表达式

获取自动见解的 AI 帮助

除了交互式调试帮助之外,Copilot 还会在 CPU 使用情况自动见解中提供详细信息。 它可提供与一组特定性能见解相关的信息和见解。 使用 Copilot,可询问有关代码中已识别的热路径上的函数的问题,以帮助你生成更高效或更具成本效益的代码。

即使没有确定具体的性能见解,也会出现询问 Copilot 按钮。 选择询问 Copilot,以向 Copilot 学习并开始提问。

Copilot 和 CPU 使用率搭配使用的动画。