Angel Hernández

January 2009 - Posts

Some useful debugging tips / Algunos tips útiles para depuración

Last year 2008 was challenging, amazing and exciting all at the same time.  I’ve had a lot of interesting experiences and situations alike that goes from moving countries (Venezuela to Australia), joining CustomWare, my first speaking engagement in Tech-Ed and so on. I’ve learned a lot generally speaking so I hope this year 2009 can be better than the previous one.  As developers, we can’t escape the fact that our code is not bug free (we wish it was but life ain’t perfect) so this post is about some useful debugging tips and options we have available

Option #1 – Visual Studio .NET Debugger

This is our first line of defense, but it’s missing 99% of the times on a production environment.  It allows to set breakpoints, add watches, evaluate expressions, view memory and its disassembly and something even cooler… We can step into .NET Framework code (Image 1)

Option #2 – CorDebug

It’s a pretty cool tool which allows us to debug .NET code using the command line. It takes some time to get used to the commands but once we do it, it’s pretty straightforward. It’s highly recommended to have the symbols files (PDB) required to step into the code. If we don’t have it then we’re going to see the code in Assembler. Let’s take as an example the Test.cs source file (Image 2), it’s a very simple application written with “Visual” Notepad.

Then we’re going to compile it using the CSC from the Command Prompt. We can either generate symbols/debug information or not with the following switches:

· Generate Debug Information

csc test.cs /platform:x64 /debug

· Don’t generate any Debug Information

csc test.cs /platform:x64

Once we’ve built our assembly/application we can launch CorDebug and start debugging it. We can either let CorDebug launch the application for us or we can attach it to the selected process by ourselves. Image 3 depicts the CorDebug “interface”. 

The yellow rounded rectangles indicate:

1. Listing of managed applications running

2. Attach the debugger to process 1372

We can execute ? anytime to get information about available commands. The following image shows CorDbg launching the application for us and we step into the code (The lines are retrieved from the PDB file and code executed outside our program is displayed in Assembler). The colour reference (Image 4) for the rounded rectangles is:

· Light Green: CorDbg launching c:\test.exe

· Light Blue: Assemblies loaded

· Yellow: Stepping into the code

· Red: Displaying and modifying variables

· Grey: Stack trace at that moment

· Cyan: Modules loaded plus Application Domain ID

Option #3 – WinDbg (Windows Debugging Tools)

It’s a multipurpose debugger that can be used to debug user mode applications, drivers and the operating system itself in kernel mode. It’s very useful to debug kernel-mode memory dumps, created after an application crashes or when experiencing a “BSoD”. This tool allows to step into the code if PDB (symbol file) is present (Image 5).

WinDbg allows loading of extension DLLs that can augment the debugger's supported commands and allow for help in debugging specific scenarios: for example, displaying an MSXML document given an IXMLDOMDocument, or debugging the Common Language Runtime (CLR). These extensions are a large part of what makes WinDbg such a powerful debugger. WinDbg is used by the Microsoft Windows product team to build Windows, and everything needed to debug Windows is included in these extension DLLs.

Option #4 – CLR Profiler

Believe it or not but this tool helped me a lot 4 years ago when one of the projects I was engaged on at that time started to act “weird”… By using CLR Profiler and Windows Monitoring and Performance tools I was able to find a memory leak issue with BSTR objects. CLRProfiler is a tool that you can use to analyze the behavior of your managed applications which is focused on analyzing what is going on in the garbage collector heap (Image 6) and you can get an overview  of your application’s memory usage (Image 7).

Option #5 – .NET Reflector

Originally developed by Lutz Roeder and now by Red Gate Software, this tool is really handy and a “must-have” in every .NET developer toolbox because it allows you to Disassemble and analyze .NET assemblies (Image 8) so you can check and step into .NET code without having the source files.

Option #6 –  Fiddler

Have you ever wanted to sniff HTTP requests/responses? If that’s the case then you might find Fiddler useful. It’s a light-weight sniffing tool which allows developers see what’s happening between client/server HTTP transmission (Image

9)

Option #7 –  Microsoft NetMon (Network Monitor)

A couple of months ago I had an issue related to Kerberos, it seemed that the Kerberos ticket was getting lost somewhere… My best choice for this kind of situations, NetMon (Image 10). It’s a complete sniffing and network monitoring tool by Microsoft.

Option #8 –  Windows’ performance and monitoring Tools

Task Manager, Performance Monitor can make our lives easier if we know how to use them and most important… Add the right performance counter to determine and detect any possible problem.

 

Hope this helps,

Kind regards,

Angel


El año pasado 2008 fue retador, interesante y emocionante todo al mismo tiempo. Tuve un montón de experiencias y situaciones por igual que van desde cambiar de países (de Venezuela para Australia), unirme a CustomWare, mis primeras charlas en Tech-Ed y pare usted de contar. He aprendido generalmente hablando así que espero que este año 2009 pueda ser mejor que el anterior. Como desarrolladores, no podemos escapar el hecho de que nuestro código no está libre de errores (así lo quisierámos pero la vida no es perfecta) por lo que este post trata sobre algunos tips y opciones que tenemos disponibles

Opción #1 – Depurador de Visual Studio .NET

Esta es nuestra primera línea de defensa, pero el 99% de las veces no está instalado en un ambiente de producción. Nos permite establecer puntos de interrupción, inspección de variables, evaluar expresiones, ver la memoria y su desensamblado y algo aún más chévere… Podemos ver código del .NET Framework (Imagen 1)

Opción #2 – CorDebug

Es una herramienta bien interesante que nos permite depurar código de .NET desde la línea de comandos. Toma algo de tiempo acostumbrarse a los comandos pero una vez que lo hacemos, es realmente sencillo. Es altamente recomendado tener los símbolos (PDB) requeridos para poder ver el código. Sí no lo tenemos entonces vamos a ver el código en Ensamblador. Ahora tomemos como ejemplo el archivo Test.cs (Imagen 2), es una aplicación bastante sencilla escrita con  “Visual” Notepad.

Luego vamos a compilarla utilizando CSC desde la línea de comandos. Podemos generar ó no símbolos (información de depuración) con los siguientes switches:

· Generar información de depuración

csc test.cs /platform:x64 /debug

· No generar información de depuración

csc test.cs /platform:x64

Una vez que hayamos generado nuestro ensamblaje/aplicación podemos ejecutar  CorDebug y comenzar a depurar. Podemos ejecutar la aplicación por nuestra cuenta ó podemos adjuntarlo al proceso seleccionado.La imagen 3 muestra la “interfaz” de CorDebug “. 

Los rectángulos amarillos indican:

1. Lista de aplicaciones administradas en ejecución

2. Adjuntar el depurador al proceso 1372

Podemos ejecutar ? en cualquier momento para obtener información de comandos disponibles. La siguiente imagen muestra a CorDbg lanzando la aplicación por nosotros y podemos ver el código (Las líneas de código se recuperan del archivo PDB y el código ejecutado fuera de nuestro programa es mostrado en Ensamblador). La referencia del color (Imagen 4) de los rectángulos es:

· Verde claro: CorDbg lanzando c:\test.exe

· Azul claro: Ensamblajes cargados

· Amarillo: Ejecución línea por línea del código

· Rojo: Mostrando y modificando variables

· Gris: Pila de llamadas al momento 

· Aguamarina: Módulos cargados además del ID AppDomain

Opción #3 – WinDbg (Windows Debugging Tools)

Es un depurador multi-propósito que puede ser utilizado para depurar aplicaciones en modo usuario,  controladores y al mismo sistema operativo en modo Kernel.  Es muy útil para depurar vaciados de memoria en modo Kernel, que son creados después de una aplicación haberse cerrado inesperadamente ó tras experimentar una “Pantalla Azul”.  Esta herramienta permite ejecutar el código línea por línea sí el archivo de símbolos (PDB) está presente (Imagen 5)

WinDbg permite cargar DLLs de extensión que pueden aumentar los comandos soportados por el depurador permitiendo así depurar en escenarios específicos: Por ejemplo,  mostrar un documento MSXML a partir de un objeto  IXMLDOMDocument ó inclusive depurar el Common Language Runtime (CLR). Estas extensiones hacen de  WinDbg un poderoso depurador.  WinDbg es utilizado por el equipo de desarrollo de Microsoft Windows y todo lo necesario para depurar Windows está incluído en estas DLLs de extensión.

Opción #4 – CLR Profiler

Creánlo ó no pero esta herramienta me ayudó mucho hace 4 años atrás cuando uno de los proyectos en los que estaba involucrado para ese entonces comenzó a actuar “raro”…  Al utilizar el CLR Profiler y las herramientas de rendimiento y monitoreo de Windows pude encontrar una fuga de memoria relacionada con objetos de tipo BSTR.  El CLR Profiler nos permite analizar lo que sucede en el montón del colector de basura (Imagen 6) así mismo podemos obtener un resumen del uso de la memoria por parte de la aplicación (Imagen 7).

Opción #5 – .NET Reflector

Originalmente desarrollado por  Lutz Roeder y ahora por Red Gate Software, esta herramienta es realmente útil y “necesaria-tener” en la caja de herramientas de cada desarrollador .NET ya que permite analizar y decompilar ensamblajes de .NET (Imagen 8) por lo que se puede chequear y revisar el código sin necesidad de tener los archivos fuentes.

Opción #6 –  Fiddler

¿Alguna vez has deseado escuchar solicitudes/respuestas basadas en HTTP? Sí es ese el caso, entonces encontrarás a Fiddler útil (Imagen 9).  Es una herramienta liviana para escuchar conversaciones basadas en HTTP entre el cliente y el servidor.

Opción #7 –  Microsoft NetMon (Network Monitor)

Hace un par de meses atrás se me presentó un problema relacionado con Kerberos, parecía que el ticket de Kerberos se estaba perdiendo en alguna parte… Mi mejor opción para ese tipo de situaciones, NetMon (Imagen 10). Es una herramienta completa para escuchar el tráfico y conversaciones en la Red.

Opción #8 –  Herramientas de rendimiento y monitoreo de Windows

El administrador de tareas y monitor de rendimiento pueden hacer nuestras vidas más fáciles si sabemos como usarlos y lo más importante… Agregar el contador de rendimiento adecuado para detectar y determinar cualquier posible problema.

 

Espero sea de utilidad,

Saludos cordiales,

Angel

image

Image 1 – Yes… We want to step into the Framework code :D

image

Image 2 – Simple application written in Visual “Notepad”  =)

image

Image 3 – Cordbg output

image

Image 4 – Cordbg output explained

 WinDbg

Image 5 – WinDbg x64 Interface

image

Image 6 – CLR Profiler displaying Heap graph

image

Image 7 – CLR Summary

image

Image 8 – .NET Reflector

image

Image 9 – Fiddler  

 

image

Image 10 – NetMon

One thing to consider when deploying AJAX enabled apps / Algo que considerar cuando se están implementando aplicaciones basadas en AJAX

I’m currently developing an AJAX enabled Webpart which consumes a WebService that connects to CRM. After deploying a simple application that resembles the Webpart functionality I’ve got the following exception (see image shown below) caused by ScriptReferenceBase class. There’s a gotcha with AjaxToolkit and .NET Framework 3.5. Suggestion… Install .NET Framework 3.5 SP1. Further information can be found here

Kind regards,

Angel


Actualmente estoy desarrollando un Webpart con capacidades de AJAX el cual consume un servicio Web que se conecta a CRM. Después de desplegar una aplicación sencilla que tiene la funcionalidad del Webpart recibí una excepción (mostrada en la imagen abajo) causada por la clase ScriptReferenceBase. Hay un problemita con el AjaxToolkit y .NET Framework 3.5. Sugerencia… Instalar .NET Framework 3.5 SP1. Acá puede encontrarse más información

Saludos,

Angel

nosp1

My first impressions with Windows 7 beta / Mis primeras impresiones con Windows 7 beta

These are some of my first impressions and findings with Windows 7 beta:

1-. Installation is faster than Vista

2-. Ability to select an active Wireless connection from installation

3-. Drivers availability (Recognized all of my devices)

4-. At simple sight, it seems to be faster than Vista (booting, copying files & performing some other tasks). I have to test with my development environment up and running (VS, SQL and WSS)

5-. Fresher and nicer user interface

6-. Ability to create Web Content (Blogging). Good integration with Windows Live

7-. Ability to show desktop without minimizing all of the active windows

8-. Recognize ISO images files allowing burning them with just a click

9-. Ability to attach VHD files (Virtual Disks)

10-. Improved system restore settings

I’ll keep you posted =)

Cheers,

Angel


Estas son algunas de mis primeras impresiones y descubrimientos con Windows 7 beta:

1-. La instalación es más rápida que Vista

2-. Posibilidad de seleccionar una conexión inalámbrica activa desde la instalación

3-. Disponibilidad de controladores  (Reconoció todos mis dispositivos)

4-. A simple vista, parece ser más rápido que Vista (Arrancando, copiando archivos y realizando otras tareas). Debo probar esto con mi ambiente de desarrollo propiamente configurado (VS, SQL y WSS)

5-. Interfaz de usuario renovada y más fresca

6-. Posibilidad de crear contenido Web (Blogging). Buena integración con Windows Live

7-. Posibilidad de mostrar el escritorio sin tener que minimizar todas las ventanas activas

8-. Reconocimiento de imágenes ISO permitiendo grabar estas con un sólo click

9-. Posiblidad de montar/adjuntar archivos VHD (Discos virtuales)

10-. Configuración mejorada para restauración del sistema

Los mantendré informados =)

Saludos,

Angel

Dealing with ISO images on Windows 7 Beta / Lidiando con imágenes ISO en Windows 7 Beta

Almost every software media I have is an ISO image. Well, I tried mounting some of these by using MagicDisc and Daemon Tools without any success so after googling a bit I found Virtual CloneDrive and it works perfectly. Please, remember to reboot your PC after installing and mount your ISO image from the context menu.

A cool feature in Windows 7, the ability to burn ISO images from the Shell without having installed any CD/DVD burner software.

Hope this helps,

Cheers,

Angel


Casi que todo el software que tengo está como imagen ISO. Bueno, intenté montar algunas después de instalar el beta de Windows 7 utilizando  MagicDisc y Daemon Tools sin tener éxito pero después de buscar un poco en Google encontré  Virtual CloneDrive y funciona perfectamente. Por favor, recuerda reiniciar tu PC después de instalarlo y monta la imagen ISO desde el menú contextual.

Una característica chévere en Windows 7, es la posibilidad de quemar imágenes ISO desde el Shell sin necesidad de tener instalado algún software de grabación de CD/DVD.

Espero sea de utilidad,

Saludos,

Angel

clonedrive

Funky behaviour on my Windows Vista x64 while copying files over the network / Funcionamiento curioso de mi Windows Vista x64 mientras copiaba archivos en la red

I’m a geek… I’m an early adopter and that’s why I keep playing with new technologies… Windows 7 couldn’t escape from this and so last week when I was backing up my laptop I received this funky message while copying files… 45180 days (123 years)

Weird, ha?

Regards,

Angel


Soy un geek…  quién adopta nuevas tecnologías y por esa sencilla razón siempre estoy jugando con nuevas tecnologías… Windows 7 no podía escapar de ello por lo que la semana pasada mientras estaba respaldando mi portátil recibí este curioso mensaje mientras copiaba archivos… 45180 días (123 años)

Raro, no?

Saludos,

Angel

 

copying-bug

I’ve been re-awarded once again as an MVP / Se me ha renovado el MVP

I’ve been on holidays for some days until now with limited internet access and I just checked my inbox and I had an email from my MVP Lead Roseanne Stamell telling me that I’ve been re-awarded once again. I’m really happy about this and I just hope to work harder and better this year. As you all may know now, I moved from Venezuela to Australia last year and it’s not as easy as you expect, however, I did my best and I’m MVP once again. I must thank God in first place, Community, My MVP Lead and Microsoft Corp.

Kind regards,

Angel


He estado de vacaciones por unos días hasta ahora con limitado acceso a Internet y acabo de revisar mi correo y tenía un mensaje de mi líder MVP Roseanne Stamell informándome que se me ha renovado el reconocimiento de MVP una vez más. Estoy realmente feliz por ello y sólo espero trabajar más duro y mejor este año. Como todos ustedes han de saber ya, me mudé de Venezuela a Australia el año pasado y no es tan fácil como parece, sin embargo, hice mi mejor esfuerzo y por ello aún sigo siendo MVP. Debo agradecer a Dios en primer lugar, la comunidad, mi líder MVP y a Microsoft Corp.

Saludos cordiales,

Angel