2010-06-22 9 views
13

Tengo un punto en mi código donde agregué un punto de interrupción. Lo que me gustaría hacer cuando el depurador se detenga en el punto de ruptura es modificar el contenido de una lista (específicamente, en este caso, quiero agregar entradas). ¿Cómo modifico el contenido de una lista durante la depuración?Agregar entrada a la lista mientras se depura en Visual Studio

Editar: La lista es una lista de cadenas.

Respuesta

25

Utilice la ventana inmediata (por defecto CTRL + D, I con combinaciones de teclas C#, o está en el menú Depuración> Windows).

A partir de ahí solo invoque myList.Add(foo), volverá diciendo que la expresión ha sido evaluada y no tiene ningún valor, pero el efecto secundario de agregar foo se produce.

2

También en la ventana de observación puede realizar declaraciones de una sola línea (o mejor expresión).

Sólo tiene que escribir algo como:

myList.Add("myNewValue") 

y pulse ENTER Debe obras (al menos siempre ha trabajado para mí)

+0

Sí, eso también funciona. Ambos enfoques tienen las limitaciones de no soportar expresiones lambda. Realmente espero que VS2010 SP1 corrija eso. –

+0

Desafortunadamente, VS2010 no corrige eso (lo he intentado), junto con el problema de edición y continuación en los métodos que usan expresiones lamba. Supongo que están muy relacionados (si no son lo mismo) y no tan fáciles de implementar – digEmAll

2

hay una técnica que se puede utilizar para inyectar código desde una punto de inflexión. Es fácil, y funciona.

  1. un punto de ruptura
  2. Haga clic en el punto de interrupción, y elegir "condiciones"
  3. pone la línea de código en la condición (que no tiene que devolver un bool)
  4. Run

Cuando se golpea su punto de interrupción, el código se ejecutará, y el depurador NO se detendrá en el punto de interrupción (porque no devolvió un bool).

Tengo esta punta desde el estudio consejos Visual blog: http://blogs.msdn.com/b/zainnab/archive/2010/05/04/set-a-complex-breakpoint-condition-vstipdebug0022.aspx

He aquí un programa de ejemplo que ilustra la técnica:

 

     static void Main(string[] args) 
     { 
      List l = new List(); 
      Console.WriteLine(l[0]); 
      System.Console.ReadLine(); 
     } 
 

Si ejecuta este código como está, usted recibirá una excepción. Sin embargo, antes de hacerlo, agregue un punto de interrupción a la línea Console.WriteLine().

Haga clic en el punto de interrupción, y elija "condiciones" En el diálogo de estado, agregue el código siguiente:

l.Add("hello") 

Ahora ejecute.

Claramente, una persona podría tener muchos problemas con esta "característica": puede cambiar el comportamiento de su aplicación con puntos de interrupción de manera que una compilación independiente del código se comporte de forma diferente a cuando se ejecuta en su máquina en tu depurador Por lo tanto, tenga mucho cuidado ...

Cuestiones relacionadas