C# DebuggerStepThrough特性讲解

C# DebuggerStepThrough特性讲解

调试代码的时候经常会遇到一个函数M1调用函数M2,M2调用M3……。Debug的时候需要一层层进去找那里出现了Bug。但是如果我们非常确定一些部分永远不会出现bug的时候就没有必要去看这些方法,更没有必要让调试器运行到这些肯定不会出错的地方来影响调试。此时对于不需要调试的函数可以用DebuggerStepThrough这个特性来标识一下,调试器就不会运行到此函数内部

    private static void Main(string[] args) {
        M1();
        Console.ReadKey();
    }

    [DebuggerStepThrough]
    private static void M1() {
        //调试器不会走到内部
        Console.WriteLine("this is M1");
        M2();
    }

    private static void M2() {
        Console.WriteLine("this is M2");
        M3();
    }

    private static void M3() {
        Console.WriteLine("this is M3");

    }

当我们非常确定M1中的方法肯定正确时可以不用去关系内部的实现。但是M1内部调用了M2,标注的特性DebuggerStepThrough只是不会走到M1内部,但是可以运行到M2,甚至M3。如果想要屏蔽所有跟M1有关的代码的话,需要用另外一个特性来告诉调试器参与调试代码的边界,这个特性是DebuggerStepperBoundary

代码如下:

    private static void Main(string[] args) {
        M1();
        Console.ReadKey();
    }

    [DebuggerStepThrough]
    [DebuggerStepperBoundary]
    private static void M1() {
        //调试器不会走到内部
        Console.WriteLine("this is M1");
        M2();
    }

    private static void M2() {
        Console.WriteLine("this is M2");
        M3();
    }

    private static void M3() {
        Console.WriteLine("this is M3");
    }

此时调试器不会运行到任何与M1相关的代码中,除非显示的打了断点

你可能感兴趣的:(C#,c#,开发语言,C#调试特性)