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

已完成

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

调试器和应用程序交互

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

注释

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

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

应用程序运行并附加调试器后,调试器将使用 .NET 运行时的调试 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.json 和 tasks.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 库和 Debug101 应用程序的情况。

    Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.0\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\net10.0\Debug101.dll'. Symbols loaded.
    

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

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

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

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

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

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

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

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

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

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

检查应用程序的输出

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

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

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

回顾

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

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