2012-06-08 11 views
5

¿Hay alguna manera de ingresar al modo de depuración cuando se cumple una determinada condición?¿Cómo ingresar al modo de depuración cuando se cumple una condición?

Por ejemplo, digamos que me gustaría entrar en el modo de depuración en la línea en la que i == 1 es verdadera:

using System; 

namespace ConditionalDebug 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var r = new Random(); 
      var i = r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i = 1; 
      Console.WriteLine(i); 
     } 
    } 
} 

Sé que es posible establecer puntos de interrupción condicionales como:

conditional breakpoint

Pero, por supuesto, no podría usar eso ya que tendría que agregar un punto de interrupción condicional para cada línea en el código donde el valor de la condición podría cambiarse y eso sería muy complicado en una aplicación real.

Entonces, ¿hay alguna manera de establecer globalmente la condición i == 1 para que el depurador se rompa en la línea en la que se cumple la condición?

Gracias por su ayuda!

Respuesta

3

La respuesta corta es 'no'

La respuesta larga es 'en realidad no, pero un poco'. Hay cosas que puede hacer para acercarse al comportamiento que desea.

  • Puede utilizar la ventana Inspección y pasar manualmente el código y ver cómo cambia.
  • Puede encontrar todas las referencias sobre la variable y aislar todas las declaraciones que pueden cambiar su variable y colocar puntos de ruptura.
  • Puede hacer lo anterior, pero use una función de envoltura (o conviértala en Propiedad) y solo establezca el valor de la variable a través de esa función (o definidor de propiedad) y luego tenga un punto único donde pueda establecer su punto de interrupción condicional para comparar el valor viejo/nuevo.
  • Puede poner un punto de interrupción en CADA línea y establecer la condición para todas a la vez. Es posible que pueda automatizar eso escribiendo un plugin o macro VS.
  • No puedo entenderlo, pero estoy seguro de que es posible hacer algo increíblemente complejo e increíble como escribir tu propio depurador e implementar tu 'Salto cuando X cambie'.
+0

Gracias, buena respuesta: D Me gusta la idea: 'Podrías poner un punto de quiebre en TODAS las líneas y establecer la condición para todas ellas a la vez. Es posible que pueda automatizar eso escribiendo un plugin o macro VS. –

1

En la ventana de puntos de interrupción de VS es posible seleccionar múltiples puntos de interrupción, y luego con el botón derecho del mouse puede establecer una condición determinada en ambos en un solo paso.

¿Está bien para usted?

+0

Gracias, es una información útil, pero sería casi imposible para proyectos reales con muchas líneas de código. :) Lo que necesitaría sería el equivalente a tener un punto de interrupción condicional en cada línea de la solución completa. –

1

Yo diría que no, si lo piensas, le pides al depurador que valide todas las líneas de código en las que estoy dentro del alcance, aunque lo veré para ver si alguien puede pensar en una solución porque sería interesante para ver :)

+0

Sí, eso es lo que estoy tratando de averiguar si es posible: para que el depurador verifique la condición después de * cada * línea de código en la solución. –

Cuestiones relacionadas