El atributo DebuggerStepThrough le permite omitir irrumpir en ciertos métodos/clases/propiedades.¿Puede DebuggerStepThrough heredarse en la implementación IEnumerable generada automáticamente?
En DebuggerStepThrough being ignored se aclara que el compilador de C# no hereda este atributo en la implementación del IEnumerable<T>
generado por el compilador.
Un ejemplo trivial de un fallo de este tipo es:
static void Main(string[] args)
{
var a = SkipMe().ToList();
}
[System.Diagnostics.DebuggerStepThrough]
static IEnumerable<int> SkipMe()
{
// comment out line below and the throw will be stepped over.
yield return 1;
throw new Exception();
}
¿Hay una manera de conseguir el compilador de C# para añadir el atributo DebuggerStepThrough
a la auto generada escribir?
¿Hay alguna manera de que visual studio omita la depuración en cualquier tipo con el atributo [CompilerGenerated]
?
-
Adición: algunas capturas de pantalla ilustrativas
Resultado después de pulsar F5
Visual Studio Versión:
Nuestro atributo que falta:
para aquellos que se preguntan por qué, al utilizar Dapper lo incluimos como una fuente de código fuente, me gustaría evitar entrar en cualquier código Dapper durante el uso regular y no quiero agregar un dll al proyecto solo por eso. –
No puedo entender esta pregunta. El compilador ya aplica el atributo [DebuggerHidden] a los métodos de clase del iterador. El ejemplo en el fragmento no tiene sentido, el depurador siempre se detiene en una excepción no detectada. El comentario en el método SkipMe() no tiene sentido, * * no pasa sobre la instrucción throw. Al menos no en VS2008, no puede decir de qué versión está hablando. –
@hans vs 2010 .net 4, el iterador solo tiene el compilador generado, lo registré en el reflector –