使用 Visual Studio Code 调试 .NET Core 应用
介绍
让我们面对现实,我们的代码并不总是按照我们期望的方式运行。开发人员依靠许多工具来帮助发现错误以及它们如何影响代码。Visual Studio Code 包含此类工具。在本指南中,您将了解 Visual Studio Code 中包含的用于 .NET Core 开发的集成构建和调试系统。
设置
本指南假设您已阅读我的指南《使用 Visual Studio Code 开发 .NET Core 应用》。在其中,您将学习如何使用编辑器快速准确地编写 C# 应用。当您第一次在 Visual Studio Code 中打开 C# 项目时,如果您安装了 C# 扩展,您将在编辑器的右下角看到一个提示。
C# 扩展可从 Visual Studio Code Marketplace 获取。要获取扩展,请按Ctrl-Shift-X / Cmd-Shift-X (本指南中的所有键盘快捷键均适用于 macOS)打开扩展窗格。在搜索栏中搜索“C#”。单击“安装”以从 Microsoft 安装扩展。
如果您希望能够在 Visual Studio Code 中调试您的项目,请选择“是”,然后.vscode目录将添加到您的项目中。
过了一会儿,提示会超时。如果你错过了,你仍然可以通过命令面板添加资产。按Ctrl-Shift-P / Cmd-Shift-P(本指南中的所有键盘快捷键均适用于 macOS),然后搜索命令.NET: Generate Assets for Build and Debug。
这将与确认提示产生相同的结果:.vscode目录将添加到您的项目中。
调试窗格
为了继续操作,请在此处克隆 Github 存储库并在 Visual Studio Code 中打开它。接受添加调试资产的提示。按Ctrl-Shift-D / Cmd-Shfit-D或单击下面突出显示的图标,在侧栏中打开调试窗格。
在调试窗格的顶部,您将看到一个下拉菜单。它包含配置列表。对于像这样的控制台应用程序,默认配置是.NET Core Launch(控制台)和.NET Core Attach。选择Launch配置,然后单击左侧的绿色Run按钮以运行应用程序。
哇哦!出问题了!
应用尝试访问空值并抛出NullReferenceException。这显然不是您希望用户看到的功能!请注意,应用已在抛出异常的行上暂停执行。调试器现在处于活动状态,您可以在调试窗格中检查应用的状态。
有问题的代码正在尝试访问Ticket对象的属性。展开VARIABLES部分中的对象,可以看到Attendee属性为null。代码尝试访问Attendee的FirstName属性,从而引发了异常。单击编辑器顶部调试工具栏中的“停止”按钮停止调试器。
断点
您不必等待异常。设置断点将在调试器中的任何情况下停止应用程序的执行。首先,在Program.cs中将Attendee添加到Ticket实例。
var ticket = new Ticket
{
TicketId = faker.UniqueIndex,
BasePrice = 200.0m,
PremiumFee = 25.0m,
IsPremium = true,
Attendee = new Attendee
{
FirstName = "John",
LastName = "Doe"
}
};
现在回到Ticket.cs,单击行号 15 的左侧。红色圆圈将代表断点。
在调试窗格中,再次单击“运行”按钮。应用将在执行Ticket.cs中的第 15 行之前暂停。但这次,它不会因错误而暂停。再次检查VARIABLES部分,查看Attendee现在具有FirstName和LastName属性。
请注意,带有断点的行在编辑器中突出显示。您可以将鼠标悬停在代码上以查看变量的值。
单击调试工具栏中的“继续”按钮完成执行并在调试控制台中查看应用程序的输出。
在继续之前单击该断点以删除它。
配置
对Program.cs中的Ticket对象做一些小的更改。
var ticket = new Ticket
{
TicketId = faker.UniqueIndex,
BasePrice = 200.0m,
PremiumFee = 25.0m,
IsPremium = true,
Attendee = new Attendee
{
FirstName = args[0],
LastName = args[1]
}
};
现在,将使用命令行参数中的值初始化Attendee 。(请记住,在 C# 中, args的第一个索引是第一个命令行参数。应用程序名称不作为参数传递。)运行应用程序。它再次崩溃,但这次是 IndexOutOfRangeException 。查看调试窗格以了解原因。
args是一个字符串数组,但数组为空。因此,当应用尝试将Attendee的FirstName设置为args[0]处的第一个命令行参数时,索引 0 处没有元素。如果应用在命令行上运行,则这个问题很容易解决。但如何在调试器中将参数传递给命令行应用?
还记得第一次打开项目时生成的构建和调试资产吗?查看.vscode目录并打开launch.json文件。这是定义配置的地方。请注意,调试窗格下拉列表中的每个选项都有一个配置。在第一个配置中,有一个args键,它是一个数组。数组中的元素将在调试应用程序时作为命令行参数传递。编辑配置以包含两个字符串。
替换Ticket.cs中第 15 行的断点并再次运行应用程序。这次,断点会停止应用程序。查看调试窗格并检查Attendee属性。它将具有您在配置中添加到args键的值。
调试 Web 应用
在此处克隆 GitHub 存储库并在 Visual Studio Code 中打开它。生成构建和调试资产并打开调试窗格。这次项目是一个 ASP.NET Core Razor Pages 应用程序。请注意,第一个配置现在是针对 Web 应用程序而不是控制台应用程序。
打开Pages目录和<font style="ver
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~