Debugging avanzado con Reflector Pro

He estado dedicando un buen tiempo a mi extensión para Visual Studio, llamada HqlAddin. Al trabajar una extensión que va a ser utilizada otro sistema (en este caso Visual Studio) me ha ocurrido que en ciertas ocasiones no se como se va a comportar dicho sistema. Si bien es cierto que dicho comportamiento debería estar documentado, ya sea de forma escrita o en UnitTests, en la vida real no siempre sucede eso. Es por ello que Reflector Pro me ha sido de gran utilidad a la hora de desarrollar nuevas funcionalidades, como también a la hora de resolver errores.

Utilizar Reflector Pro, es muy sencillo, luego de abrir el proyecto tenemos que ir al menú Reflector y clickear en “Choose Assemblies to Debug”:

2010-10-11_1952

Es probable que si es la primera vez que lo utilizamos nos solicite desactivar “Just My Code”.

Luego tenemos que seleccionar el ensamblado sobre el cual nos gustaría adentrarnos:

image

Y eso es todo…. una vez que le damos aceptar, Reflector descompilara el ensamblado que hayamos seleccionado y a partir de este momento podemos depurar dentro del ensamblado con F11.. paso a paso.

Algunas aclaraciones:

  • Si el ensamblado que seleccionamos, en su directorio tiene un archivo PDB, esto quiere decir que nosotros ya tenemos los símbolos de depuración. Aquí pueden suceder dos cosas:
    • Si nosotros tenemos el código fuente de ese ensamblado (en el estado en que estaba cuando se compilo), utilizar Reflector para este caso es innecesario. Pero igual se puede.
    • Si nosotros no tenemos el código fuente de ese ensamblado, lo mejor sería borrar el PDB del directorio en el que estaba, o simplemente dejar que reflector haga una copia a otro directorio y modifique temporalmente nuestras referencias. Esto luego se puede desactivar con un solo click.
  • Algunos ensamblados, de Visual Studio por ejemplo, están compilados de una manera que se llama “código optimizado”, si bien es posible seguir paso a paso la ejecución en este código, no es posible hacer cosas triviales como observar el valor de una variable.
  • Después de un tiempo de utilizar la herramienta, uno se da cuenta que hay algunas cosas que no están tan bien descompiladas, un caso típico son los bloques enumeradores:
public IEnumerable<int> EjemploEnumerador(string parametro)
{
    yield return 0;
    if (parametro == "a") yield return 1;
    yield return 32;
}

Hay que recordar que los bloques enumeradores son solo un truco del compilador, y por lo tanto, no esta tan fácil descompilarlo.

Estoy muy conforme con la herramienta y considero que es muy útil a la hora de trabajar con .Net.

Por último quería agradecer a RedGate por brindarme una licencia gratuita para utilizar en el desarrollo de mi proyecto OpenSource y a todas las empresas que siguen esta línea, tanto JetBrains, SharpCrafters, e inclusive el mismo Microsoft.


blog comments powered by Disqus
  • Categories

  • Archives