Depuración 2

En el post anterior comentábamos como es el entorno de depuración, las herramientas que necesitamos y  la configuración para el servidor de símbolos de Microsoft. En este segundo post vamos a configurar el servidor de código fuente para el .net Framework 3.5 dentro de Visual Studio 2008.
Ya digimos antes que Visual Studio 2008 es tanto el entorno de programación, como un entorno de depuración de aplicaciones, con lo que vamos a configurarlo para tener el entorno perfecto para depurar nuestras aplicaciones en .net. Para ello empezaremos por el menú de opciones que se encuentra en Herramientas -> Opciones.


Una vez abierto el cuadro de dialogo tenemos que desplazarnos hasta Depuración, una vez allí tenemos (a la derecha) una serie de opciones que podemos configurar. Vamos a ver brevemente que impacto tienen esas opciones en nuestra experiencia de depuración.
• Enable Just My Code (Managed only): Esta opcion habilita si se puede depurar únicamente nuestro código o también el código de terceros, véase el código de framework o ensamblados que tengamos referenciados en nuestro proyecto. Esta opción tiene que estar deshabilitada si queremos depurar el código fuente que Microsoft nos proporciona.
• Enable  source server support: Esta opción habilita el soporte para el servidor de codigo dentro de Visual Studio, para poder utilizar el servidor de codigo fuente de Microsoft es necesario habilitar esta opción.
• Require source files to exactly match the original versión: Cuando estamos depurando dentro de Visual Studio par que el depurador se pare en un punto de interrupción y muestre el código fuente de la aplicación el fichero actual y el código compilado tienen que ser iguales, sino VS no mostrará el código fuente. Esta opción se tiene que deshabilitar porque en el caso del .Net Framework, se compila de una manera especial y se eliminan algunas referencias del código fuente original, con lo que VS no va a ser capaz de saber que ese código fuente es exactamente el que el servidor de código se descarga.
• Suppress JIT optmization on module load (Managed Only): Cuando una aplicación se ejecuta, normalmente el JIT realiza una serie de optimizaciones en la compilación para que el rendimiento sea mejor, esto puede que sea un problema si estamos intentando depurar el código x86 que genera el JIT con SOS. Esto únicamente se refiere al código que se genera dentro del JIT porque si el ensamblado que se ha cargado en memoria ha sido precompilado con ngen ese código no pasará con el JIT.

Una vez que se han establecido esas opciones, lo que hay que hacer es irse dentro de la categoría de depuración, a símbolos, en la que nos aparece una serie de opciones a la derecha.

• En la lista de localizaciones de simbolos de depuración (*.pdb) tenemos que introducir una entrada, que es justamente el servidor de código fuente de Microsoft, cuya dirección es: http://referencesource.microsoft.com/symbols
• En la caja de texto de debajo tenemos que especificar cuál es el directorio en el que queremos que se almacenen los símbolos descargados desde el servidor de símbolos. En el post anterior establecíamos ese directorio en c:\symbols así que podemos hacerlo aquí también.


La información completa de cómo se configura el servidor de símbolos de Microsoft lo tenéis en esta dirección:
http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx

 

Depuración

Como parte del proceso de creación de software, la depuración es esa cosa que fastidia mucha gente pero que a mí me encanta. Depurar es un arte no lo podemos negar, y como tal hay que saberlo, así que aquí van una serie de post en los cuales quiero hablar de la depuración de aplicaciones, tanto desde el punto del vista del mundo administrado como desde el punto de vista no administrado.


La primera pregunta es porque depurar. Depurar nos ayuda a corregir problemas de software y a comprobar que todo funciona correctamente. Básicamente es su principal función, aunque tiene otras que veremos más adelante. Todos los ejemplo que voy a facilitar son para .net en C#.
En esta serie de artículos hablaré sobre el depurador de Visual Studio que viene integrado en el IDE, y el Debuggins tools for Windows (Windbg) que es depurador de Microsoft para el S.O. Se pueden hacer varios tipos de depuración administrada, la cual es únicamente para el mundo .net, nativa en el que depuramos código en ensamblador y mixta. Puede que alguien eche en falta algún tipo de depuración más, como por ejemplo SQL o Silverlight o incluso depuración del kernel, pero como ya he dicho solo hablaré sobre .net.
Dentro de estos tipos de depuración algunas se pueden mezclar, por ejemplo, podemos estar depurando una aplicación hecha en C# y además depurar también el código x86 que genera el JIT, o podemos estar depurando una aplicación .net como si fuera nativa y además depurar el código administrado. Esto depende del depurador que usemos y de la configuración del mismo, prácticamente se pueden obtener los mismos resultados por ambas partes.
Lo primero que hay que hacer es configurarse un buen entorno de depuración para eso necesitamos una serie de herramientas para conseguir el entorno adecuado.

Software que hay que tener:
• http://msdn2.microsoft.com/es-es/vstudio/default.aspx
• http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
• http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx


Una vez instalado este software tenemos que configurar el servidor de símbolos de Microsoft. Este servidor de símbolos se descargará la información de depuración de todos los módulos (DLL) de Windows y de todos los ensamblados de .Net. Para ello tenemos que crear una variable de entorno y crear una carpeta local donde se vayan descargando esos símbolos para tenernos offline y que en el proceso de depuración no tengamos que descargarlos cada vez. La configuración sería:


• _NT_SYMBOL_PATH

• SRV*c:\symbols*http://msdl.microsoft.com/download/symbols


Dentro de valor aparece una ruta local c:\symbols, ahí es donde se van a guardar todos los símbolos que nos descarguemos del servidor de Microsoft durante nuestra sesión de depuración.
Una vez que tenemos eso podemos empezar a depurar tanto con VS2008 y con WinDbg. En el siguiente articulo explicaré como depurar con el código fuente del .Net Framework que Microsoft proporciona a través de otro servidor de símbolos.

Saludos y feliz depuración.

 

Hola Mundo !!

Hola a todos !!

Me llamo Luis Guerrero, soy analista / programador de .Net en una empresa que se llama Ilitia, que está en Madrid. Trabajo en el departamento de Labs de Ilitia y en el departamento de formación lo que me permite estar a la última de todas las novedades del mundo de la programación.

La empresa en la que trabajo es partner gold de Microsoft lo que significa que estoy en permanente contacto en tecnologías de Microsoft, tanto para soluciones internas como las soluciones para los clientes.

Este blog pretende ser un punto de encuentro sobre mi experiencia de programación dentro y fuera de Ilitia así como información técnica sobre lo relacionado con .net.