Apéndice B: Depurador en tiempo de ejecución (CorDbg.exe)

.NET Framework SDK incluye el depurador en tiempo de ejecución de la línea de comandos denominado CorDbg.exe, que algunos programadores pueden preferir al correspondiente para Windows, DbgClr y el depurador integrado en Visual Studio. Al igual que DbgClr, CorDbg no compila aplicaciones. Para utilizar estos compiladores, primero hay que generar la aplicación para que incluya el modificador /debug apropiado.

El depurador en tiempo de ejecución permite realizar las siguientes tareas.

  • Iniciar, asociar, continuar, cancelar la asociación y detener un proceso en ejecución.
  • Mostrar dominios de aplicación, ensamblados, módulos cargados, clases y funciones globales.
  • Ir a instrucciones y recorrer paso a paso los procedimientos de código fuente y de código nativo.
  • Mostrar las líneas de código fuente.
  • Establecer el valor de una variable.
  • Establecer la siguiente instrucción en una línea nueva.
  • Establecer o mostrar los puntos de interrupción.

Se puede mostrar la lista completa de opciones de CorDbg si se escribe CorDbg /? en el símbolo del sistema.

Para obtener una breve explicación sobre cómo utilizar el depurador en tiempo de ejecución, vea el ejemplo Calculator. Se puede iniciar el depurador con su programa en el símbolo del sistema si escribe CorDbg calc.exe desde el directorio que contiene el archivo ejecutable. Esta acción inicia CorDbg y muestra las líneas siguientes.

(cordbg) run calc.exe
Process 1596/0x63c created.
[thread 0x624] Thread created.
234:   using (Form f = new VersioningDemo()){ //automatically calls Dispose()

**Nota   **Si no ejecuta una versión de depuración en tiempo de ejecución, aparecerán varios mensajes de advertencia que indican que el depurador no puede cargar símbolos para los ensamblados principales de .NET. Estas advertencias se pueden pasar por alto.

A continuación, ejecute la instrucción "pro(cessenum)":

(cordbg) pro

PID=0x49c (1596) Name=C:\...\Tutorials\Debugging\Calc\CS\calc.exe

ID=1 AppDomainName=calc.exe*

PID=0x544 (1348) Name=C:\...\aspnet_wp.exe

ID=3 AppDomainName=/LM/w3svc/1/Root/NetSDK/Debug-2-...

ID=2 AppDomainName=/LM/w3svc/1/Root/NetSDK-1-...

ID=1 AppDomainName=DefaultDomain

Esto muestra que Calc.exe tiene el identificador de proceso 1596. Este equipo también ejecuta una aplicación ASP.NET cuyo identificador de proceso es 1348. Si no se ejecutan versiones de depuración del motor en tiempo de ejecución de .NET, probablemente no se habrán instalado los símbolos de las bibliotecas de tiempo de ejecución y también se recibirán diversas advertencias que indican que no se pueden cargar esos símbolos. A continuación, ejecute la instrucción "sh(ow)" para mostrar el código fuente:

(cordbg) sh
229:            }
230:     }
231:
232:     [System.STAThreadAttribute()]
233:     public static void Main(string[] args) {
234*           Form f = new VersioningDemo();
235:            f.ShowDialog();
236:            //throw(new System.Exception());  //a runtime error
237:     }
238: }
239: } 

Esto indica que la ejecución está actualmente detenida en la línea 234, que es la primera línea del programa. En ese momento se podrían intentar ejecutar los siguientes comandos:

  • ap: muestra información acerca del dominio de la aplicación.
  • l: muestra una lista de módulos cargados, clases y funciones globales.
  • p: imprime las variables actuales.
  • sh 50: muestra las 50 líneas anteriores de código fuente.

A continuación, hay que establecer un punto de interrupción [b(reakpoint)] en la línea 195, que es la primera línea de la rutina btnNumbersClicked:

(cordbg) b 195
Breakpoint #1 has bound to C:\...\Tutorials\Debugging\Calc\CS\calc.exe.
#1      C:\ ...\Tutorials\Debugging\Calc
\CS\Calc.cs:192 btnNumbersClicked+0x0(il) [active]

Por último, escriba "con(t)" para continuar la ejecución del programa, que muestra el formulario de la calculadora. Al hacer clic en uno de los botones numéricos de la calculadora se interrumpirá la ejecución y se volverá al depurador en la línea 195. Para finalizar, escriba "ex(it)" con el fin de salir del depurador.

Para obtener información adicional acerca de CorDbg, vea Depurador en tiempo de ejecución (CorDbg.exe).