我最近注意到Visual Studio 2010调试器不断跳转到标有[DebuggerStepThrough]
属性的方法。
callstack看起来像这样:
[DebuggerStepThrough]
的类中调用方法 IsSubclassOfGeneric 。我刚刚用foreach循环替换了Linq调用,如下所示,无济于事:
这有点令人烦恼,因为这个方法被频繁调用,我不明白为什么要忽略该属性。
答案 0 :(得分:3)
尝试这个简单的控制台应用程序,在指示的行上放置断点,运行调试器并在第一个断点处按步骤(F11)。它应该错过第二个破发点。 Otherwsie如果可能是视觉工作室设置/扩展搞乱了。
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<Type> types = typeof(System.IO.IOException).GetHierarchy(typeof(System.Exception)); //break point here
int i = 0;
}
}
static class Ext {
//[DebuggerStepThrough]
//[DebuggerNonUserCode]
//[DebuggerStepperBoundary]
public static IEnumerable<Type> 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<Type> GetHierarchy2(this Type type, Type limit) {
if (type == null) { //break point here
throw new Exception();
}
IList<Type> types = new List<Type>();
do {
types.Add(type);
if (type == limit) {
break;
}
} while ((type = type.BaseType) != null);
return types;
}
}
}
修改强>
实际上我认为它与yield语句有关。如果我尝试构建一个列表(GetHierarchy2),我对DebuggerStepThrough属性没有任何问题
答案 1 :(得分:0)
您是否正在调试发布模式二进制文件?它可能是优化的,也许只是编译时编译器的确定性,所以你将无法介入。看看生成的IL,看看是否是这种情况。