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相关的代码中,除非显示的打了断点