Share via


Introducción a la depuración

El código fuente se compila y ejecuta en .NET Framework mediante un proceso en dos fases. En primer lugar se compila el código fuente en el código MSIL (Microsoft intermediate language, lenguaje intermedio de Microsoft) con un compilador compatible con .NET Framework, como el de Visual Basic .NET o Visual C#. En segundo lugar, el código MSIL se compila en código nativo.

Esencialmente, el proceso de depuración se realiza en dirección inversa. A medida que se ejecuta el código, el depurador pasa primero el código nativo de nuevo a MSIL y, a continuación, pasa el código MSIL a código fuente mediante archivos PDB (Programmer Database, base de datos de programador). Por lo tanto, para habilitar la depuración es necesario generar la información de asignación requerida en cada fase del proceso de compilación.

El primer paso para habilitar la depuración consiste en crear el archivo PDB que asigna MSIL a código fuente. Al desarrollar componentes precompilados con Visual Basic .NET o Visual C#, esto se especifica con el modificador /debug. Cuando se utilizan páginas de código subyacente en ASP.NET, se especifica con la configuración <compilation debug="true"/> en archivo .config del equipo o de la aplicación.

El segundo paso necesario para realizar una depuración consiste en indicar al compilador JIT (Just-In-Time, justo a tiempo), de código MSIL a código nativo, que cree la información de asignación entre el código MSIL y el código nativo. Esto se consigue configurando el atributo JITTracking del ensamblado. Este atributo, que es esencialmente un indicador, se configura automáticamente cuando el depurador carga el proceso que se va a depurar. Sin embargo, si el proceso se carga (y se compila con JIT) fuera del depurador y éste se asocia posteriormente, es necesario configurar este atributo de antemano con un modificador del compilador. Si este atributo no está configurado, el depurador que se asocia a un programa en ejecución no puede pasar el código nativo a MSIL y no será posible volver a asignar más adelante el código fuente en esa sesión de depuración.

Aunque se puede utilizar Visual Studio .NET para compilar y depurar, es importante saber que los depuradores CorDbg y DbgClr incluidos en .NET Framework SDK no compilan código MSIL. Al utilizar un depurador independiente, es necesario compilar previamente el código a MSIL con un compilador diferente. Un importante efecto colateral de este proceso es que si el código fuente cambia mientras se depura, no basta con volver a cargar el archivo de código fuente; será necesario volver a compilar. Por supuesto, ASP.NET es un caso especial ya que el código subyacente de las páginas ASP.NET se compila dinámicamente con los compiladores de la línea de comandos de ASP.NET en el directorio de tiempo de ejecución de .NET.

Modificadores del compilador

Los compiladores de Visual C# y Visual Basic .NET admiten el mismo conjunto de modificadores del compilador de depuración. Aunque puede parecer que hay muchas combinaciones posibles, realmente sólo se pueden utilizar las tres configuraciones siguientes.

  1. No incluir información de depuración:
    • (ninguna)
    • /debug-
  2. Crear un archivo de base de datos de programador (PDB):
    • /debug:pdbonly
  3. Crear un archivo PDB y establecer el atributo JITTracking:
    • /debug
    • /debug+
    • /debug:full

Tal y como se mencionó anteriormente en este tutorial, el proceso de compilación y depuración consta de dos pasos. Cuando se compila código fuente en MSIL, al utilizar cualquiera de los modificadores del depurador excepto /debug- se creará un archivo PDB. Tres de las opciones restantes, específicamente /debug, /debug+ y /debug:full, realizan la misma función: crean el archivo PDB y establecen el atributo JITTracking, lo que permite que el depurador pase de nuevo el código nativo a código fuente cuando se asocia el depurador a un programa en ejecución.

Vea también

Depurar aplicaciones de .NET Framework | Depurar aplicaciones Web de ASP.NET | Apéndice A: Para obtener más información | Apéndice B: Depurador en tiempo de ejecución (CorDbg.exe)