练习 - 在调试环境中运行代码
Visual Studio Code 用户界面使开发人员能够在调试环境中运行其代码。 对调试的支持由扩展提供,而对于 C# 开发人员,调试器支持由支持代码开发和 IntelliSense 的扩展提供。
调试器和应用程序交互
代码调试器可用于暂停和恢复代码执行、检查变量状态,甚至可以在运行时更改分配给变量的值。 你可能想知道调试器如何控制和修改正在运行的应用程序? 简短的答案是,调试器有权访问应用程序的运行时环境和可执行代码。
注释
调试器与运行时环境的交互是一个高级主题。 此外,了解调试器在后台的工作原理并不是使用调试器的要求。 但是,以下说明可能满足你的好奇心。
适用于 C# 的 Visual Studio Code 调试器使用 .NET Core 运行时启动应用程序并与之交互。 启动调试器时,它会创建运行时的新实例,并在该实例中运行应用程序。 运行时包括应用程序编程接口(API),调试器使用该接口附加到正在运行的进程(应用程序)。
应用程序运行并附加调试器后,调试器将使用 .NET Core 运行时的调试 API 和标准调试协议与正在运行的进程通信。 调试器可以通过设置断点、单步执行代码和检查变量来与进程(在 .NET 运行时实例中运行的应用程序)进行交互。 Visual Studio Code 的调试器接口使你能够导航源代码、查看调用堆栈和计算表达式。
指定调试会话的最常见方法是 launch.json 文件中的启动配置。 此方法是调试器工具启用的默认选项。 例如,如果创建 C# 控制台应用程序并从“运行”菜单中选择“开始调试”,调试器将使用此方法启动、附加到应用程序,然后与应用程序交互。
创建新的代码项目
学习调试器工具的第一步是创建可在调试器中运行的代码项目。
打开一个新的 Visual Studio Code 实例。
在“文件”菜单中,选择“打开文件夹”。
在 “打开文件夹 ”对话框中,导航到 Windows 桌面 文件夹。
在 “打开文件夹 ”对话框中,选择“ 新建文件夹”。
将新文件夹命名 为 Debug101,然后选择“ 选择文件夹”。
在“终端”菜单中,选择“新终端”。
.NET CLI 命令可用于创建新的控制台应用。
在终端面板命令提示符处,输入以下命令:
dotnet new console关闭“终端”面板。
检查用于调试的启动配置
Visual Studio Code 使用启动配置文件来指定在调试环境中运行的应用程序。
如果 Debug101 文件夹不包含Debug101.sln文件,请选择 Program.cs,然后验证是否已创建.sln文件。
打开 C# 代码文件会提示环境检查项目文件。 .sln文件是 Visual Studio 用来管理项目的解决方案文件,通常在 Visual Studio Code 中创建新项目时自动创建。 调试器使用.sln文件来标识应在调试环境中运行的项目。
在“视图”菜单中,选择“命令面板”。
在命令提示符下,输入 .net:g,然后选择 .NET:生成构建和调试的资产。
请注意已添加到项目文件夹的新
.vscode文件夹。
该
.vscode文件夹包含用于配置调试环境的文件。展开文件夹
.vscode,然后选择 launch.json 文件。花一分钟时间检查 launch.json 文件。
启动配置文件可以包含多个配置。 每个配置都包含用于定义该配置的属性集合。
请注意, prelaunchTask 属性指定 生成 任务。
在
.vscode文件夹中,选择 tasks.json。请注意,tasks.json 文件包含代码项目的 生成 任务。
关闭 launch.json 和 tasks.json 文件。
请仔细了解本模块后面的启动配置属性。
从“运行”菜单运行代码
Visual Studio Code 中的 “运行 ”菜单提供使用或不使用调试器运行代码的选项。
打开 Program.cs 文件。
将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."; }在“文件”菜单上,选择“保存”。
打开 “运行 ”菜单。
请注意, “运行 ”菜单提供用于运行代码的选项(无论是否进行调试)。
在 “运行 ”菜单上,选择“ 在不调试的情况下运行”
请注意,“调试控制台”面板显示控制台输出, 调试工具栏 显示执行控件。
“调试控制台”面板应显示在代码编辑器下方。 默认情况下, 调试工具栏 (显示代码执行控件的小工具栏)位于代码编辑器上方,并水平居中位于 Visual Studio Code 窗口上。
在“调试”工具栏上,选择“停止”。
从“运行”菜单启动调试会话
“ 运行 ”菜单包括启动调试会话的选项。
在 “运行 ”菜单上,选择“ 开始调试”
花一分钟时间查看调试控制台面板中显示的消息。
应用程序的输出与在未调试的情况下运行时相同,但显示与准备调试环境相关的其他消息。
请注意有关加载 .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 运行时的特殊实例来控制应用程序的执行并评估应用程序状态。
在“调试”工具栏上,选择“停止”。
从“运行和调试”视图运行代码
Visual Studio Code 中的“运行和调试”视图支持丰富的调试体验。
切换到“运行和调试”视图。

在“运行和调试”视图中,选择“ 开始调试”。
“ 开始调试 ”按钮是视图顶部控制面板上的绿色箭头。
请注意,“调试控制台”面板显示有关从 “运行 ”菜单启动调试进程时显示的调试器配置的相同消息。
在“调试”工具栏上,选择“停止”。
检查应用程序的输出
在关闭“调试控制台”面板之前,花一分钟时间查看代码生成的输出。
请注意,安德鲁的问候消息意外重复。
在本模块的其余部分中,你将使用 Visual Studio Code 调试器工具来调查编码问题。
回顾
在本单元中,应谨记以下几个重要事项:
- 适用于 C# 的 Visual Studio Code 调试器使用 .NET Core 运行时启动应用程序并与之交互。
- Visual Studio Code “运行” 菜单具有启动应用程序的选项,包括附加调试器和不附加调试器的选项。
- 调试工具栏包含用于停止正在运行的进程的按钮。
- “运行和调试”视图包括用于开始调试应用程序的选项。