在单步执行代码时,我发现某些特定的行被忽略了DebuggerStepThrough属性。它似乎用于linq语句中。
这是类似的SO:DebuggerStepThrough being ignored
逐步执行的代码处于“调试”模式。它与下面的ReflectionHelper方法在相同的解决方案中。项目引用是通过项目而不是其他地方的编译dll进行的,即与项目相同的输出bin / debug文件夹。没有其他异常发生,可能暗示正在使用的程序集与在项目两边进行代码更改时会注意到的是不同的程序集。
因此,当我逐步使用F11时,它将进入下面的代码。
我的public static class ReflectionHelper
中有以下内容
[DebuggerStepThrough]
public static bool Exists(string propertyName, object srcObject)
{
PropertyInfo propInfoSrcObj = srcObject.GetType().GetProperties()
.FirstOrDefault(p => p.Name == propertyName); //-- Debugger stops here
return (propInfoSrcObj != null);
}
如何避免执行此代码?我当前的解决方法是在继续使用F11进行调试之前先按SHIFT + F11可以退出。
发生这种情况的另一个示例是此代码。
string databaseNamePair = split.Find(f => f.StartsWith("Initial Catalog"));
最佳答案
这些Linq语句包含被编译为方法调用的lambda表达式。因此,该属性不适用于这些不同的方法。
我想您可以将lambda转换为完整的方法,以便可以使用该属性标记它们,但这将使代码变得笨拙。