• 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:LearningRecordsdocC#NetCoreWorkspaceCodeChapter04Dumping> dotnet run
    Hello, World!
    DumpingcomplexObject to SharpPad.
    

    具体使用方法在后面介绍异步任务的时候讲等待对异步方法Dump的调用。

    剩下就是使用Trace做开发和运行时日志的记录,因为前段时间项目中已经封装好了,所以作为WPF技巧更新出来,这里就不写了。

  • 相关阅读:
    PAT甲级——1095 Cars on Campus (排序、映射、字符串操作、题意理解)
    PAT甲级——1096 Consecutive Factors (数学题)
    PAT甲级——1097 Deduplication on a Linked List (链表)
    博客作业06--图
    博客作业05--查找
    博客作业04--树
    博客作业03--栈和队列
    博客作业2---线性表
    博客作业01-抽象数据类型
    C语言最后一次作业--总结报告
  • 原文地址:https://www.cnblogs.com/duwenlong/p/15491745.html
Copyright © 2020-2023  润新知