Intellitrace: una buena razón para comenzar a probar VS2010

De todas las novedades que trae Visual Studio 2010, creo que una que nos facilitará la vida en gran medida a los desarrolladores, es Intellitrace. Este tema ya ha sido tratado en geeks (por ejemplo en varios posts de el gran Bruno), pero me gustaría dar una visión general y un ejemplo muy sencillo que permita intuir su potencia.

Intellitrace (antes conocido como Historical Debugger), supone una gran evolución en la forma en que podemos depurar nuestras aplicaciones. Se trata de un concepto bastante simple, pero que nos proporciona grandes posibilidades: Intellitrace puede grabar la mayoría de eventos y estados que se van sucediendo durante la ejecución de una aplicación. A medida que vamos teniendo todos estos datos grabados, Intellitrace nos permite utilizarlos para reproducir ejecuciones pasadas, e incluso “rebobinar”, o volver a estados anteriores de la aplicación, durante una sesión de depuración.

Como complemento a la capacidad de grabar, reproducir y volver atrás en el estado de las ejecuciones, además disponemos de una completa interfaz de usuario que nos permite analizar con todo detalle las grabaciones de ejecuciones efectuadas, teniendo de forma simple, acceso a datos muy valiosos. Entre estos datos podemos tener por ejemplo los sucesivos valores que van tomando nuestras variables, las posibles excepciones que se hayan producido, los accesos a ficheros y/o registro, e incluso las interacciones del usuario con la aplicación.

Con esto es muy fácil que los desarrolladores de .NET, podamos ir dejando un poco de lado técnicas de depuración basadas en cosas como Debug.WriteLine, bucear entre interminables ficheros de log, y torturas chinas similares.

Intellitrace da soporte a la depuración en diversos escenarios, incluyendo:

  • Grabación de eventos durante la ejecución de la aplicación, de modo que podemos saber fácilmente qué demonios está haciendo nuestra aplicación
  • Depuración basada en reproducir una ejecución grabada anteriormente. Extremadamente útil para reproducir y trazar bugs, y también para facilitar la colaboración de varios desarrolladores durante la depuración
  • Grabación y reproducción de fallos encontrados durante pruebas manuales, de gran interés para trabajar con nuestro equipo de pruebas o QA en la estabilización de nuestra aplicación (se acabó “en mi máquina funciona…”)
  • Depuración pruebas lanzadas durante construcciones automatizadas. Respuesta rápida a preguntas del tipo: las pruebas se ejecutan en mi máquina pero hacen fallar la build… ¿por qué?
  • Depuración de fallos encontrados como resultado de la ejecución de pruebas unitarias
  • Depuración de problemas encontrados durante pruebas de carga (por lo general bastante difíciles de investigar, si no es con la ayuda de mecanismos como las trazas o de la gente del DOT de Plain Concepts)

Como breve introducción a Intellitrace voy a poner un ejemplo extremadamente simple, pero espero que bastante ilustrativo. Es relativo al primer escenario: la grabación de eventos durante la ejecución de la aplicación.

  1. Crear una aplicación de consola en VS 2010 con un código como el siguiente (WARNING: lo que viene a continuación es un cúmulo de burradas, y puede herir la sensibilidad del lector en casi todas las líneas, pero cuanto más cafre sea el código, mejor para el ejemplo. Al fin y al cabo nuestro objetivo es depurar ¿no? :-P)
    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Text;
    
    
    
    namespace HelloIntellitrace
    
    {
    
        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                while (true)
    
                {
    
                    try
    
                    {
    
                        Console.Write("Introduce un número: ");
    
                        int a = Int32.Parse(Console.ReadLine());
    
                        int b = 1;
    
                        Console.WriteLine((b / a).ToString());
    
                    }
    
                    catch (Exception)
    
                    {
    
                    }               
    
                }
    
            }
    
        }
    
    }
    
    
    
  2. En el menú Tools – Options – Intellitrace – Intellitrace Events, marcar el checkbox “Console”
  3. Iniciar la depuración. Cada vez que se nos pida en consola un número, introducir lo que nos venga en gana: números (incluido el cero), letras, etc.
  4. Sin parar la depuración, pulsar “Break All” en la ventana de Intellitrace y prestar atención a lo que aparece. Como podéis ver, tenemos en orden cronológico, todo lo que la aplicación ha ido haciendo durante su ejecución: excepciones lanzadas, excepciones capturadas, eventos del depurador… incluso la interacción del usuario con la consola. Al hacer click en cualquier entrada, obtendremos información adicional, enlaces a otras acciones, y además iremos al código fuente involucrado en dicho evento. Y en las ventanas de autos y pila tendremos toda la información correspondiente a cada evento grabado. Impresionante ¿no?

 image

Como podéis ver, extremadamente sencillo y potente, y eso que sólo hemos visto muy por encima el primero de los escenarios. Y lo tenéis disponible desde ya, en cuanto os decidáis a bajar la Beta 2 de Visual Studio 2010.

Un saludo!!!

Material del evento: ALM’09 Ecosistemas heterogéneos de desarrollo en TFS

Aquí os dejo la presentación que utilicé durante la charla del ALM’09, Ecosistemas Heterogéneos de Desarrollo en TFS.

Durante la sesión pudimos ver cómo Team Foundation Server, junto a las herramientas de Teamprise y a otros muchos complementos que tenemos disponibles (power tools, herramientas de línea de comandos, etc.), pueden servirnos para gestionar el ciclo de vida de nuestras aplicaciones sea cual sea la tecnología que utilicemos, incluyendo .NET, Java, C y C++, Ruby, Phyton y una larga lista de posibilidades.

Gracias a todos los asistentes, organizadores y a los compañeros que nos obsequiaron con un montón de sesiones de calidad.

Un saludo!!!