how dnspy descargar .net debugging il

.net - how - descargar dnspy zip



Depurador de código de nivel de IL (5)

Aquí hay un artículo sobre depuración de IL. Dice que no puedes hacerlo y luego habla sobre formas de hacerlo. También hay algo de información en los comentarios sobre hacerlo también.

¿Hay algún depurador de nivel IL en forma de un complemento VS o una aplicación independiente?

El depurador de Visual Studio es excelente, pero le permite depurar en el nivel de código HLL o en el lenguaje ensamblador, no puede depurar IL. Parece que en algunas situaciones sería útil tener la oportunidad de depurar a nivel de IL.

En particular, podría ser útil al depurar un problema en el código que no tiene la fuente de.

Es discutible si realmente es útil depurar IL cuando no tienes la fuente, pero de todos modos.


El complemento Debug Companion VS parece ser exactamente lo que estaba buscando, excepto que no verá el proyecto de biblioteca en mi solución. Solo cuando agregué una aplicación win de consola a la solución apareció algo en esa lista de proyectos.

El problema con el enfoque de descompilación / compilación para mí era que el código que estaba depurando no era mi código. Podría haberlo descompilado de todos modos, pero creo que no hay forma de firmar ese ensamblado recompilado para que se cargue en lugar del ensamblado original.

Con el problema particular, resultó que era suficiente depurarlo en el nivel de lenguaje ensamblador y obtener la pila de llamadas del método que arrojaba la excepción y los parámetros con los que se llamaba el método.


ISTR hay un complemento de depurador para Reflector.

No lo uso yo mismo, aunque he usado TestDriven.net para depurar un ensamblado de terceros con la ayuda de Reflector:

weblogs.asp.net/nunitaddin


Aquí está el archivo .BAT que utilizo para depurar IL assembler en Visual Studio. El archivo .IL.IL creado contiene las líneas de código fuente originales y las líneas de ensamblador de IL generadas, pero no muestra el código de máquina jitted. Llamé al archivo por lotes ILDEB.BAT y se invoca como "ILDEB mypgm". Uso el "break" de la directiva de ensamblador de IL para forzar al depurador de Visual Studio a un punto de interrupción cuando se golpea.

for /f "tokens=1 delims=." %%1 in ("%1") do set NAME_ONLY=%%1 @erase/q %NAME_ONLY%.il.il @if not exist %NAME_ONLY%.dll goto quit ildasm /out:%NAME_ONLY%.il.il /source /nobar %NAME_ONLY%.dll @if not exist %NAME_ONLY%.il.il goto quit ilasm /dll /debug /out=%NAME_ONLY%.dll %NAME_ONLY%.il.il @if not exist %NAME_ONLY%.dll goto quit peverify %NAME_ONLY%.dll :quit


La mejor forma de hacerlo es usar ILDASM para desensamblar el binario administrado, que generará las instrucciones IL. A continuación, vuelva a compilar ese código fuente de IL en modo de depuración utilizando ILASM, cuando inicie el depurador de Visual Studio podrá recorrer el IL sin procesar.

  1. ildasm foo.exe /OUT=foo.exe.il /SOURCE
  2. ilasm foo.exe.il /DEBUG

Escribí una publicación de blog sobre este tema en: Cómo depurar el código generado por el compilador .