Books

martes, 5 de octubre de 2010

Como depurar las librerías nativas de .NET

Tutorial para depurar el código fuente de las librerías nativas de .NET con Visual Studio 2008

Muchas veces nos hemos preguntado, ¿por que *** .NET me está llamando a esta función? ¿por que estoy teniendo efectos colaterales al usar.....? etc.

Por suerte hace ya tiempo que Microsoft se vio obligado a hacer público su código fuente.

Para poder hacer esto hay que configurar el Visual Studio para que descargue la información de depuración de las librerías nativas de .NET:

Configurando el Visual Studio

Instalando el parche

Primero de todo hay que instalar un parche que arregla un problema de la parte que recoge información sobre el código fuente, podemos descargarlo de: Visual Studio 2008 QFE
  • Si tienes problemas para descargar el parche, prueba seleccionando otra ubicación de archivo
  • Si la instalación falla o te da un error, introduce el DVD del Visual Studio y vuelve a ejecutar el parche

Configurando el Visual Studio 2008

Una vez iniciado el Visual Studio, hay que ir al menú de Herramientas --> Opciones --> Depuración ( Tools --> Options --> Debugging )  y dentro de "General" hay que buscar las opciones:
  • "Enable Just My Code" y DESACTIVARLA
  • "Enable Source Server Support" y ACTIVARLA


Después deberemos de seleccionar el apartado de"Symbols" y:
  • En "Symbol file (.pdb) locations:" deberemos añadir una nueva entrada (1) e introducir la url(2): http://referencesource.microsoft.com/symbols
  • En "Cache symbols from symbol servers to this directory:"
  • Activar la opción "Search the above locations only when symbols are loaded manually"

Depurando

Una vez realizada la configuración estaremos preparados para descargar los códigos fuentes de la plataforma .NET y seguir la traza de nuestro código dentro de las librerias de microsoft.
Para ello vamos a presentar un ejemplo

Cargando símbolos

En cualquier proyecto que tengamos introduciremos un punto de interrupción, por ejemplo en el OnFormLoad y si miramos la pila de llamadas veremos que las funciones que han desencadenado la llamada de OnFormLoad, están en gris, si damos al botón derecho sobre una de ellas y en el menú emergente "Load Symbols" se descargará el código fuente y podremos ver su código fuente, e incluso podemos hacer "step ino" (F11) en las funciones de .NET



Otra forma de cargar los símbolos es ir a la ventana de módulos ( CTRL+ALT+U )  y buscar el módulo que queremos depurar y dar al botón derecho y en el menú emergente "Load Symbols", esta forma de cargar símbolos será la que usemos cuando queramos introducirmos con el "step into" (F11) dentro de las funciones del framework.



Esta última forma también nos sirve si queremos depurar algún módulo nuestro y no queremos agregarlo a la solución, bastará con hacerle el Load Symbols y cuando lo pida, introducir el path donde está el pdb.

No hay comentarios: