Buenas,

mientras sigo generando datos para alimentar los nuevos informes en Visual Studio Team System 2010, hoy toca comentar sobre una de las herramientas que nos facilitará o eso espero los escenarios de depuración.

Se trata de la Depuración Histórica: una nueva herramienta que mientras se está ejecutando o depurando una aplicación, almacena información sobre la ejecución y nos permite analizar la misma en otro momento.

Lo interesante es que es posible configurar que tipo de información se almacenará, donde podemos tener algo tan simple como el CallStack de ejecución de una función, pero también datos mas avanzados como los valores y estados de las variables en un determinado momento de ejecución, o inclusive tenemos la posibilidad de crear nuestros propios extensores para “almacenar” la información que consideremos necesaria (snapshots de una base de datos por ejemplo).

El siguiente paso a paso muestra a grandes rasgos como utilizar esta herramienta y como interpretar la misma.

 

Ejemplo

1. Suponiendo que tenemos el siguiente código de ejemplo

  1: public class Class1
  2: {
  3:   int ret = 0;
  4:   public int GetNumber()
  5:   {
  6:     for ( int i = 0; i < 3; i++ )
  7:     {
  8:       ret += GetRandomNumber();
  9:     }
 10:   }
 11:   public int GetRandomNumber()
 12:   {
 13:      Random rnd =  new Random();
 14:      return rnd.Next(100);
 15:   }
 16: }

 

Invocaremos la función GetNumber() desde otro módulo en modo depuración.

 

2. En este momento podremos ver que además de la sección donde están los puntos de interrupción existe una nueva sección que nos muestra un pequeño círculo negro. Esta sección es la que nos permite navegar a través de la información que recolecta el Historical Debugger en Visual Studio 2010.

 

3. Cuando vemos el panel de depuración histórica, podemos ver que en este panel existen 3 secciones que nos muestran la pila de llamadas; las funciones y eventos que se capturan para cada llamada y la información recolectada en ese punto por el depurador.

 

 

4. Si lanzamos la depuración y entramos en depuración en la funcion GetNumber() ; podremos ver que en la 2da sección se van enumerando los diferentes pasos a esta función:

-  el paso por el depurador e inicio de la depuración de la función

-  la pausa en un punto de interrupción dentro de la función

Adicionalmente es posible ver en cada uno de estos pasos los valores locales que tenian algunas variables de contexto durante la depuración. Una vez que ha comenzado el ciclo For, podremos ver como cambian los valores en cada una de las llamadas

 

 

5. En este ejemplo he activado la recolección COMPLETA de datos, por lo que siempre tenemos acceso al histórico con toda la información de contexto, la siguiente imágen muestra como al analizar uno de los pasos de ejecución de la función GetRandomNumber() podemos ver toda la información que se proceso en la misma.

 

 

6. Finalmente, desde cada entrada de la ventana de depuración siempre es posible saltar al sitio de la llamada, a la línea que invocó el evento, o volver al modo “live” con los valores actuales de depuración.

 

Saludos @ Home

El Bruno

Crossposting from El Bruno