Depuración de propiedades automáticas

126

¿Hay alguna forma de establecer un punto de interrupción en setter / getter en la propiedad implementada automáticamente?

int Counter { get; set; }

Aparte de cambiarlo a propiedad estándar (lo estoy haciendo de esta manera, pero para hacerlo tengo que cambiar y recompilar todo el proyecto)

Marek Kwiendacz
fuente
2
¿Con qué IDE estás trabajando? ¿Estudio visual? (Sugiero agregar una etiqueta correspondiente a su pregunta, ya que este es en realidad más relacionado con un IDE en particular que a la de C # sí mismo idioma.)
stakx - ya no contribuye
55
@stakx en el mundo .NET tenemos un IDE predeterminado :)
Stilgar
1
@Stilgar, soy consciente de eso, estoy usando VS, después de todo. Pero "predeterminado" no significa que sea el único, ni que todos lo usen. Como se trata de una pregunta IDE, es importante saber qué IDE estamos viendo aquí. De ahí mi comentario anterior.
stakx: ya no contribuye el
44
@stakx bien, cuando no se menciona el IDE para una pregunta relacionada con .NET, se supone que es VS. Es más, estaba bromeando :) :)
Stilgar

Respuestas:

220

Usando Visual Studio 2008, 2010, 2012, 2013:

  1. Ir a la ventana de punto de interrupción
  2. Nuevo -> Descanso en la función ...
  3. Para el get, escriba:ClassName.get_Counter()

    Para el set, escriba:ClassName.set_Counter(int)

Obtendrá un "No hay fuente disponible" cuando se alcanza el punto de interrupción, pero obtendrá la ubicación de la llamada en la pila de llamadas.

Encontré esta solución aquí en MSDN

Matt Smith
fuente
Brillante. Gracias. Ya no necesito cambiar las propiedades automáticas a una estándar (con campo). Y no más recompilación :)
Marek Kwiendacz
9
Esto también funciona para constructores predeterminados. usoClassName.ctor
Călin Darie
11
VS2015 ha solucionado esto simplemente configurando los puntos de interrupción en el auto getter & setter :)
cateyes
1
No funciona aqui. Probé los dos Form.set_Heighty MainWindow.set_Heightninguno funcionó.
Hola Ángel
@ Hola, Angel, ten en cuenta que para los setters, debes incluir el tipo, así que algo como Form.set_Height (int)
Matt Smith
7

Si fuera usted, convertiría temporalmente la propiedad en una propiedad estándar respaldada por un campo interno ... establezca sus puntos de interrupción y luego podrá volver a cambiarla.

Kieron
fuente
3

En Visual Studio 2017:

Desplácese sobre la palabra "set" -> haga clic derecho -> Punto de interrupción -> Insertar punto de interrupción

Antes de:

antes de

Después:

Después

andreyk2 Hohlov
fuente
0

Establezca los puntos de interrupción donde está estableciendo la propiedad u obteniendo propiedad, de ninguna otra manera.

puede hacerlo mediante las opciones Buscar todas las referencias

Y dado que solo está almacenando valores y no tiene ningún código en la parte del setter, ¿qué depura?

TalentTuner
fuente
3
sí, pero ¿qué sucede cuando lo usa, por ejemplo, en 20 lugares? Y cada nuevo punto de interrupción ralentiza el proceso de depuración. O bien, ¿qué sucede si el acceso a la propiedad se realiza mediante framework (por ejemplo, serialización)?
Marek Kwiendacz
1
Puntos de ruptura condicionales. Ponga el punto de ruptura, haga clic derecho y asígnele una condición ...
Phill