练习 - 在调试环境中运行代码

已完成

Visual Studio Code 用户界面使开发人员能够在调试环境中运行其代码。 对调试的支持由扩展提供,而对于 C# 开发人员,调试器支持由支持代码开发和 IntelliSense 的扩展提供。

调试器和应用程序交互

代码调试器可用于暂停和恢复代码执行、检查变量状态,甚至可以在运行时更改分配给变量的值。 你可能想知道调试器如何控制和修改正在运行的应用程序? 简短的答案是,调试器有权访问应用程序的运行时环境和可执行代码。

注释

调试器与运行时环境的交互是一个高级主题。 此外,了解调试器在后台的工作原理并不是使用调试器的要求。 但是,以下说明可能满足你的好奇心。

适用于 C# 的 Visual Studio Code 调试器使用 .NET Core 运行时启动应用程序并与之交互。 启动调试器时,它会创建运行时的新实例,并在该实例中运行应用程序。 运行时包括应用程序编程接口(API),调试器使用该接口附加到正在运行的进程(应用程序)。

应用程序运行并附加调试器后,调试器将使用 .NET Core 运行时的调试 API 和标准调试协议与正在运行的进程通信。 调试器可以通过设置断点、单步执行代码和检查变量来与进程(在 .NET 运行时实例中运行的应用程序)进行交互。 Visual Studio Code 的调试器接口使你能够导航源代码、查看调用堆栈和计算表达式。

指定调试会话的最常见方法是 launch.json 文件中的启动配置。 此方法是调试器工具启用的默认选项。 例如,如果创建 C# 控制台应用程序并从“运行”菜单中选择“开始调试”,调试器将使用此方法启动、附加到应用程序,然后与应用程序交互。

创建新的代码项目

学习调试器工具的第一步是创建可在调试器中运行的代码项目。

  1. 打开一个新的 Visual Studio Code 实例。

  2. 在“文件”菜单中,选择“打开文件夹”

  3. “打开文件夹 ”对话框中,导航到 Windows 桌面 文件夹。

  4. “打开文件夹 ”对话框中,选择“ 新建文件夹”。

  5. 将新文件夹命名 为 Debug101,然后选择“ 选择文件夹”。

  6. 在“终端”菜单中,选择“新终端”

    .NET CLI 命令可用于创建新的控制台应用。

  7. 在终端面板命令提示符处,输入以下命令:

    dotnet new console
    
  8. 关闭“终端”面板。

检查用于调试的启动配置

Visual Studio Code 使用启动配置文件来指定在调试环境中运行的应用程序。

  1. 如果 Debug101 文件夹不包含Debug101.sln文件,请选择 Program.cs,然后验证是否已创建.sln文件。

    打开 C# 代码文件会提示环境检查项目文件。 .sln文件是 Visual Studio 用来管理项目的解决方案文件,通常在 Visual Studio Code 中创建新项目时自动创建。 调试器使用.sln文件来标识应在调试环境中运行的项目。

  2. 在“视图”菜单中,选择“命令面板”

  3. 在命令提示符下,输入 .net:g,然后选择 .NET:生成构建和调试的资产

  4. 请注意已添加到项目文件夹的新 .vscode 文件夹。

    显示 EXPLORER 中 .vscode 文件夹的屏幕截图。

    .vscode 文件夹包含用于配置调试环境的文件。

  5. 展开文件夹 .vscode ,然后选择 launch.json 文件。

  6. 花一分钟时间检查 launch.json 文件。

    启动配置文件可以包含多个配置。 每个配置都包含用于定义该配置的属性集合。

  7. 请注意, prelaunchTask 属性指定 生成 任务。

  8. .vscode 文件夹中,选择 tasks.json

  9. 请注意,tasks.json 文件包含代码项目的 生成 任务。

  10. 关闭 launch.jsontasks.json 文件。

请仔细了解本模块后面的启动配置属性。

从“运行”菜单运行代码

Visual Studio Code 中的 “运行 ”菜单提供使用或不使用调试器运行代码的选项。

  1. 打开 Program.cs 文件。

  2. 将Program.cs文件的内容替换为以下代码:

    /* 
    This code uses a names array and corresponding methods to display
    greeting messages
    */
    
    string[] names = new string[] { "Sophia", "Andrew", "AllGreetings" };
    
    string messageText = "";
    
    foreach (string name in names)
    {
        if (name == "Sophia")
            messageText = SophiaMessage();
        else if (name == "Andrew")
            messageText = AndrewMessage();
        else if (name == "AllGreetings")
            messageText = SophiaMessage();
            messageText = messageText + "\n\r" + AndrewMessage();
    
        Console.WriteLine(messageText + "\n\r");
    }
    
    bool pauseCode = true;
    while (pauseCode == true);
    
    static string SophiaMessage()
    {
        return "Hello, my name is Sophia.";
    }
    
    static string AndrewMessage()
    {
        return "Hi, my name is Andrew. Good to meet you.";
    }
    
  3. 在“文件”菜单上,选择“保存”。

  4. 打开 “运行 ”菜单。

    请注意, “运行 ”菜单提供用于运行代码的选项(无论是否进行调试)。

  5. “运行 ”菜单上,选择“ 在不调试的情况下运行”

  6. 请注意,“调试控制台”面板显示控制台输出, 调试工具栏 显示执行控件。

    “调试控制台”面板应显示在代码编辑器下方。 默认情况下, 调试工具栏 (显示代码执行控件的小工具栏)位于代码编辑器上方,并水平居中位于 Visual Studio Code 窗口上。

  7. 在“调试”工具栏上,选择“停止”

从“运行”菜单启动调试会话

运行 ”菜单包括启动调试会话的选项。

  1. “运行 ”菜单上,选择“ 开始调试”

  2. 花一分钟时间查看调试控制台面板中显示的消息。

    应用程序的输出与在未调试的情况下运行时相同,但显示与准备调试环境相关的其他消息。

  3. 请注意有关加载 .NET 资源和 Debug101 应用程序的消息。

    前两条消息报告说正在加载 .NET Core 库,然后是你的 Debug101 应用程序。

    Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.4\System.Private.CoreLib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
    Loaded 'C:\Users\someuser\Desktop\Debug101\bin\Debug\net7.0\Debug101.dll'. Symbols loaded.
    

    调试器使用 .NET 运行时的特殊实例来控制应用程序的执行并评估应用程序状态。

  4. 在“调试”工具栏上,选择“停止”

从“运行和调试”视图运行代码

Visual Studio Code 中的“运行和调试”视图支持丰富的调试体验。

  1. 切换到“运行和调试”视图。

    显示“运行和调试”视图中的“运行”选项的屏幕截图。

  2. 在“运行和调试”视图中,选择“ 开始调试”。

    开始调试 ”按钮是视图顶部控制面板上的绿色箭头。

  3. 请注意,“调试控制台”面板显示有关从 “运行 ”菜单启动调试进程时显示的调试器配置的相同消息。

  4. 在“调试”工具栏上,选择“停止”

检查应用程序的输出

  1. 在关闭“调试控制台”面板之前,花一分钟时间查看代码生成的输出。

  2. 请注意,安德鲁的问候消息意外重复。

在本模块的其余部分中,你将使用 Visual Studio Code 调试器工具来调查编码问题。

回顾

在本单元中,应谨记以下几个重要事项:

  • 适用于 C# 的 Visual Studio Code 调试器使用 .NET Core 运行时启动应用程序并与之交互。
  • Visual Studio Code “运行” 菜单具有启动应用程序的选项,包括附加调试器和不附加调试器的选项。
  • 调试工具栏包含用于停止正在运行的进程的按钮。
  • “运行和调试”视图包括用于开始调试应用程序的选项。