2010-04-28 13 views
6

Me lo he estado preguntando por un tiempo: ¿hay alguna manera de codificar/programar puntos de interrupción ...? Condicionalmente? Por ejemplo, ¿puedo especificar algo como - "cuando esta variable se convierte en este valor, rompe y abre el depurador"? (Sería bastante útil, especialmente en bucles largos cuando desea depurar la ejecución de bucle de un valor de bucle tardío.)¿Hay alguna forma de establecer o codificar puntos de interrupción condicionalmente?

Supongo que esto puede ser específico de IDE ya que la depuración se implementa de forma diferente en IDEs diferentes ... Lo haría estar interesado en saber cómo hacer esto en cualquier IDE, pero específicamente en Eclipse y Visual Studio.

Respuesta

5

Esto es definitivamente posible en Visual Studio. Normalmente puede hacer clic en el margen izquierdo para insertar el punto de interrupción, y luego hacer clic derecho en ese punto de interrupción. Una de las opciones en el menú contextual es "Condición ...", y puede especificar un predicado que le dirá al depurador solo el corte en ese punto de corte si se cumple el predicado.

+0

gracias! alguna pista de cómo lograr esto en eclipse? aunque ahora conozco la terminología y que es posible, probablemente pueda googlearla muy fácilmente – froadie

+0

Desafortunadamente, no. La última vez que utilicé Eclipse fue hace unos tres o cuatro años y apenas lo recuerdo =/ – Tejs

+0

Ok, descubrí cómo al probar la misma técnica :) Tal vez lo publique como una nueva respuesta. Gracias por la ayuda – froadie

1

La mayoría de los IDE permiten puntos de interrupción condicionales por esta misma razón. En Visual Studio, puede hacer clic derecho en el punto rojo del punto de corte en el margen y abrir el diálogo de condición desde allí. También puede obtener el diálogo de condición desde la ventana de punto de interrupción en Visual Studio. No estoy familiarizado con Eclipse.

3

En Visual Studio, puede declarar el punto de interrupción condicional de forma declarativa, que es como un punto de interrupción normal, pero solo se interrumpirá cuando una determinada condición sea verdadera. La condición puede usar variables locales y lo que sea accesible desde donde se establece el punto de interrupción. Simplemente haga clic derecho en cualquier punto de interrupción (punto rojo) y seleccione "Condición ...".

Además, los lenguajes .NET pueden llamar al método Debugger.Break() para romper la ejecución mediante programación. Esto también se puede hacer dentro de una instrucción if:

if (count > 8 && Debugger.IsAttached) 
    Debugger.Break(); 
+0

genial! ¿Existe algún tipo de método que pueda deshabilitar/habilitar fácilmente el código de depuración al cambiar entre entornos de desarrollo y producción? – froadie

+0

Sí. Utilice la directiva #ifdef: '#ifdef DEBUG' ' MessageBox.Show ("Esta es una versión de depuración!"); '' # endif'. Puede definir nuevas directivas con '#define BETA_BUILD'. –

+0

Además, todas las llamadas a la clase 'Debug' no existirán cuando se construya la configuración Release, porque tiene aplicado el atributo' ConditionalAttribute', que tiene un efecto similar al '# ifdef', solo en un método o nivel de clase. Puede aplicar el atributo a sus propios métodos y clases. –

2

Establecer un punto de interrupción condicional en Eclipse (gracias por todas las respuestas visuales Studio!):

Establecer un punto de interrupción. Haga clic con el botón derecho y elija "Propiedades del punto de interrupción ...". Marque "Habilitar condición" e ingrese su código de condición en el área de texto.

3

Si su IDE no admite puntos de interrupción condicionales, agregue una instrucción if y rompa su interior.

if (variable == 3) { 
    // Stub code to attach breakpoint. 
    1 = 1; 
} 
Cuestiones relacionadas