-
C# 8.0和.NET Core 3.0高级编程 分享笔记五:第二部分在开发过程中进行调试
4.2在开发过程中进行调试
4.2.1创建带有故意错误的代码
下面首先创建一个带有故意错误的控制台应用程序以探索调试功能,然后使用工具进行跟踪和修复。
(1)在Chapter04文件夹创建一个名为Debugging的文件夹和一个控制台应用程序项目,将这个项目添加到工作区。
(2)导航到View|Command Palette,输入并选择OmniSharp:Select Project然后选择Debugging项目。
(3)在Debugging文件夹中打开并修改Program.cs,因为使用的是NET6所以添加一个新的cs文件名为Utilities.cs,定义一个带有故意错误的函数,并在Program.cs中调用这个函数,如下所示:
这里切换了NET6。所以代码和书上的从这里开始就不一样了。但是整体思维是一样的。
需要补NET6知识的,打开这个网站。顶级语句 - C# 教程 | Microsoft Docs
Program.cs
using MyNamespace;
// See https://aka.ms/new-console-template for more information
//Console.WriteLine("Hello, World!");
//https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/tutorials/top-level-statements 文档位置
double a=4.5;
double b=2.5;
double answer=MyNamespace.Utilities.Add(a,b);
Console.WriteLine($"{a}+{b}={answer}");
Console.ReadLine();
Utilities.cs
namespace MyNamespace
{
public static class Utilities
{
public static double Add(double a,double b)
{
return a*b;
}
}
}
(4)运行控制台应用程序并查看结果,输出如下所示:
4.5+2.5=11.25
(5)按回车结束控制台应用程序。
但是等等,这里有错误发生!4.5加上2.5应该等于7而不是11.25!下面使用调试工具来查找和消除错误。
4.2.2 设置断点
断点允许你标记想要暂停的代码行,以检查程序状态并查找错误。
(1)单击Program中的double a=4.5;所在行,
(2)导航到Debug|Toggle Breakpoint或按F9功能键。然后,有个红色的圆圈将出现在左侧的空白栏中,表示设置了断点。可以使用F9功能键切换断点,使用鼠标点击左侧页边的空白处,添加和删除断点。
(3)在Visual Studio Code中导航到View|Debug,也可以使用Ctrl键或Ctrl+Shift+D组合键。
(4)在Debug窗格的顶部打开Start Debugging 按钮右侧的下来菜单,选择.NET Core Launch(console) (Debugging)。这里不配图了,如果没有的话,注意看是不是工作区目录的层级关系关系设置错了,根目录是工作区,Debugging是二级目录。。
4.2.3使用调试工具栏进行导航
Visual Studio Code中显示的调试工具栏包含6个按钮,以便于访问调试功能。
- Step Over/F10、Step Into/F11、Step Out/Shift+F11,这些按钮可以单步或进入方法内部查看执行语句的过程,
- 重启Ctrl或Ctrl+Shift+F5。这个将停止程序,然后立即重启程序。
- Shift+F5 这个按钮将立即停止程序。
跳过去了一部分,因为看界面视图就可以了解,如Debug窗格、使用F11和F10单步执行代码。
4.2.6自定义断点
这个比较重要,很多人用不好,或者不知道如何使用,所以这里做一下记录。
(1)如果在调试中,请单击Stop或导航到Debug|Stop Debugging,也可按Shift+F5组合键。
(2)在BREAKPOINTS窗格中单击迷你工具栏的最后一个按钮Remove All Breakpoints,或导航到Debug|Remove All BreakPoints。
(3)单击WriteLine语句。
(4)按F9功能设置断点。
(5)右击断点并先择EditBreakpoint。
(6)输入一个表达式,比如answer<9,注意这个表达式的值必须为True才能激活断点。(这里不知道为什么跟,我自己测试发现结果为11.5 小于9是进不去断点的,所以这点我吧书上的内容改了。)
(7)开始调试注意没有遭遇断点。
(8)停止调试。
(9)编辑断点,将表达式的值修改为answer>9。(同样的,我吧书上的内容改了)
(10)开始调试,这次遇到了断点
(11)停止调试
(12)剪辑断点并选择Hit Count,然后输入数字3,意味着在激活之前需要遭遇三次才行。
(13)将鼠标悬停在断点的红色圈圈上查看摘要。
使用SharpPad转储变量
针对有经验的.NET开发人员来说,他们最喜欢的工具之一是LINQPad。对于复杂的嵌套对象,可以方便、快速的将它们的值输出到工具窗口中。
(1)在Visual Studio Code中导航到View|Extensions。
(2)搜索SharpPad并单击Install。
(3)在Chapter04文件夹创建一个名为Dumping的文件夹和一个控制台应用程序,并将这个项目添加到工作区。
(4)在终端窗口中输入如下命令,将SharpPad包添加到Dumping项目中。
dotnet add package SharpPad
(5)打开Dumping.csproj,留意包引用,如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SharpPad" Version="1.0.4" />
</ItemGroup>
</Project>
(6)修改Program.cs导入SharpPad和System.Threading.Tasks名称空间,定义complexObject变量并将其转储到SharpPad窗口中,代码如下:
using SharpPad;
using System;
using System.Threading.Tasks;
using static System.Console;
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
var complexObject=new
{
FirstName="Petr",
BirtDate=new DateTime(year:1972,month:12,day:25),Friends=new[]{"Amir","Geoff","Sal"}
};
WriteLine($"Dumping{nameof(complexObject)} to SharpPad.");
await complexObject.Dump();
运行结果如下:
PS D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Chapter04\Dumping> dotnet run
Hello, World!
DumpingcomplexObject to SharpPad.
具体使用方法在后面介绍异步任务的时候讲等待对异步方法Dump的调用。
剩下就是使用Trace做开发和运行时日志的记录,因为前段时间项目中已经封装好了,所以作为WPF技巧更新出来,这里就不写了。
出处:https://www.cnblogs.com/duwenlong/p/15491745.html