C#---第十八课:Debug调试技巧--Debug类、pin 、add watch、拖动断点、修改变量、两个断点的联动

1. 在output窗口中输出变量的内容----Debug类

Microsoft Doc ----Debug 类


public static void WriteLineIf(bool condition, string? message);
// 1. 第一个传递参数传递的是条件
// 2. 第二个传递的是任意数据类型

using System.Diagnostics;

class Test
{
    static void Main()
    {
        int index = 2;
        Debug.WriteLine("Step1: Entering Main");
        Debug.WriteLineIf(index==1, "This is a successed test case.");
        Debug.WriteLineIf(index!=1, "This is a failed test case.");
        Debug.WriteLineIf(index!=1, 123456);
        Debug.WriteLineIf(index!=1, false);
        Debug.WriteLine("Step2: Exiting Main");
    }
}

// Step1: Entering Main
// This is a failed test case.
// 123456
// False
// Step2: Exiting Main

在这里插入图片描述



2. Pin变量 / add watch 实时监控变量的变化


using System.Diagnostics;

class Test
{
    static void Main()
    {
        int index = 2;
        index += 1;
        index *= 2;
        Debug.WriteLine("index-------{0}", index);
        Console.ReadKey();
    }
}


pin to sources & add watch ,这两种方式都是将变量添加到监控面板,最终可以实时观察到变量的变化,方便调试。


(1) pin to sources


step1: debug状态下,将鼠标放到变量上,最终会出现下图pin的对话框,然后点击图钉icon即可pin成功。
在这里插入图片描述


step2: pin成功之后,如下变量的小方框可随意拖到位置。
在这里插入图片描述


(2) add watch


step1: 选中变量,右击,点击 Add Watch 即可
在这里插入图片描述
在这里插入图片描述



3. 自由拖动黄色箭头图标

  • 当debug的时候,黄色箭头还可以向上、向下拖动。如果向上拖动,则上一步还会再次执行一次,但是是基于累加的值执行的。
  • 重复执行某步骤:例如,如下情况时候,index=3。如果将黄色箭头拖动到8行再执行,则index会变为4,相当于每次都会累加执行步骤。
  • 跳过执行某步骤:如果执行到第九行(还未执行第九行),也可以直接拖动黄色箭头到第10行,则第九行就不执行了。

在这里插入图片描述



黄色箭头可以自由拖动的前提是: 代码未执行到黄色箭头所代表的函数、代码段等。



case1: 当断点为所有函数名的时候,此时如下三个断点可以自由拖动的
在这里插入图片描述



case2: 如果断点设置在函数内部,且黄色箭头执行到函数内,则断点无法拖动到函数外面。

在这里插入图片描述



4. 直接修改变量的值

using System.Diagnostics;

class Test
{
    static void Main()
    {
        int index = 2;
        for(int i = 0; i < 50; i++)
        {
            index += 1;
            Console.WriteLine(i);
        }
        if(index == 52)
        {
            Debug.WriteLine("result----------->{0}", index);
        }
        Console.ReadKey();
    }
}

step1: debug到如下步骤的时候,index 与 i的值如下:
在这里插入图片描述

step2: 直接修改index 与 i的值如下,debug到下一步的时候,直接跳过了整个for循环
在这里插入图片描述



5. 两个断点的联动(当一个断点触发,另一个断点才会触发debug)


using System.Diagnostics;

class Test
{
    static void Main()
    {
        int age = 15;
        string gender = "Man";
        if (age > 18)
        {
            Debug.WriteLine("This way please.");
        }
        else
            Debug.WriteLine("This class don't permit under 18.");
        if (gender == "Man")
        {
            Debug.WriteLine("Please pay this order.");
        }
        Console.WriteLine("You are lucky ");
        Console.ReadKey();
    }
}

step1: 在15行处,右击选择"Actions",选择 “Only enable when the following breadpoint is hit”(当某个断点触发的时候,才会调用这个断点) , 后面方框可以选择具体哪个断点。
在这里插入图片描述

    1. 如上代码直接debug的时候发现,直接跳过了11行、15行断点的地方,直接到了19行位置。
    1. 虽然debug的时候,直接到19行,但是13行的else其实也执行。

在这里插入图片描述



  1. 当age =22的时候,11行会和15行的断点联动,一个执行带动另一个也执行。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-alien

您的鼓励,是我最大的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值