DebuggerStepThrough being ignored

后端 未结 2 1062
予麋鹿
予麋鹿 2021-01-18 00:32

I have noticed lately that the Visual Studio 2010 debugger keeps jumping into this method that is marked with the [DebuggerStepThrough] attribute.

2条回答
  •  爱一瞬间的悲伤
    2021-01-18 01:03

    Try this simple console application, put break points on the lines indicated, run the debugger and on the first break point, press step into (F11). It should miss the second break point. Otherwsie if might be a visual studio setting/extension messing things up.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    
    namespace tmp {
        class Program {
            static void Main(string[] args) {
                IEnumerable types = typeof(System.IO.IOException).GetHierarchy(typeof(System.Exception)); //break point here
                int i = 0;
            }
        }
        static class Ext {
            //[DebuggerStepThrough]
            //[DebuggerNonUserCode]
            //[DebuggerStepperBoundary]
            public static IEnumerable GetHierarchy(this Type type, Type limit) {
                if (type == null) { //break point here
                    throw new Exception();
                }
                do {
                    yield return type;
                    if (type == limit) {
                        yield break;
                    }
                } while ((type = type.BaseType) != null);
            }
    
            [DebuggerStepThrough]
            public static IEnumerable GetHierarchy2(this Type type, Type limit) {
                if (type == null) { //break point here
                    throw new Exception();
                }
                IList types = new List();
                do {
                    types.Add(type);
                    if (type == limit) {
                        break;
                    }
                } while ((type = type.BaseType) != null);
                return types;
            }
        }
    }
    

    EDIT

    Actually i think it has something to do with the yield statement. If i try building a list (GetHierarchy2), i have no problem with the DebuggerStepThrough attribute

提交回复
热议问题