Compartir vía


Realizar depuración utilizando Just-In-Time Debugger en Visual Studio

La depuración Just-in-Time puede iniciar Visual Studio automáticamente cuando se produce un error en una aplicación que se ejecuta fuera de Visual Studio o esta se bloquea. Con la depuración Just-In-Time, puede probar aplicaciones fuera de Visual Studio, y abrir Visual Studio para comenzar el proceso de depuración cuando se produce un problema.

La depuración Just-in-Time es compatible con aplicaciones de escritorio de Windows. No funciona para aplicaciones universales de Windows ni para código administrado hospedado en una aplicación nativa, como visualizadores.

Consejo (if the meaning of "Tip" is advice or suggestion)

Si solo desea que deje de aparecer el cuadro de diálogo del depurador Just-in-Time pero no tiene Visual Studio instalado, vea Deshabilitar el depurador Just-in-Time. Si alguna vez ha tenido instalado Visual Studio, puede deshabilitar la depuración Just-in-Time en el registro de Windows.

Habilitar o deshabilitar la depuración Just-In-Time en Visual Studio

Puede configurar la depuración Just-in-Time desde el cuadro de diálogo de Visual Studio Herramientas>Opciones (o Depurar>Opciones).

Nota

Para habilitar o deshabilitar la depuración Just-in-Time, debe ejecutar Visual Studio como administrador. Al habilitar o deshabilitar la depuración Just-In-Time, se establece una clave del Registro y es posible que se necesiten privilegios de administrador para modificar dicha clave. Para abrir Visual Studio como administrador, haga clic con el botón derecho en la aplicación de Visual Studio y elija Ejecutar como administrador.

Para habilitar o deshabilitar la depuración Just-In-Time:

  1. En el menú Herramientas o Depurar, seleccione Opciones>Depuración>Just-In-Time.

    Habilitar o deshabilitar la depuración JIT

    Nota

    Si no se muestra la opción de menú Just-In-Time, asegúrese de que el depurador Just-In-Time está instalado mediante el Instalador de Visual Studio.

  2. En el cuadro Habilitar depuración Just-In-Time para estos tipos de código, seleccione los tipos de código que desea que depure la depuración Just-In-Time: Administrado, Nativo y/o Script.

  3. Seleccione Aceptar.

Si habilita el depurador Just-in-Time pero no se abre cuando se produce un error en una aplicación o esta se bloquea, vea Solución de problemas de la depuración Just-in-Time.

Deshabilitar la depuración Just-in-Time en el registro de Windows

Es posible que la depuración Just-In-Time todavía esté habilitada aunque Visual Studio ya no esté instalado en el equipo. Si Visual Studio ya no está instalado, puede deshabilitar la depuración Just-In-Time editando el Registro de Windows.

Para deshabilitar la depuración Just-In-Time mediante la edición del Registro:

  1. En el menú Inicio de Windows, ejecute el editor del Registro (regedit.exe).

  2. En la ventana del Editor del Registro de, busque y elimine las siguientes entradas del Registro si existen:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

    clave del Registro JIT

  3. Elimine también las siguientes entradas del Registro si existen:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    Asegúrese de no eliminar ni cambiar ninguna otra clave del Registro.

  4. Cierre la ventana del Editor del Registro.

Habilitar la depuración Just-In-Time de una aplicación Windows Form

De forma predeterminada, las aplicaciones de Windows Forms tienen un controlador de excepciones de nivel superior que permite a la aplicación seguir ejecutándose si puede recuperarse. Si una aplicación de Windows Forms produce una excepción no controlada, se muestra el siguiente cuadro de diálogo:

Excepción no controlada de Windows Forms

Para habilitar la depuración Just-in-Time en lugar de un control de errores estándar de Windows Forms, agregue esta configuración:

  • En la sección system.windows.forms del archivo machine.config o <nombre de la aplicación>.exe.config, establezca el valor de jitDebugging en true:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • En una aplicación de Windows Forms de C++, establezca también DebuggableAttribute en true en un archivo .config o en el código. Si compila con /Zi y sin /Og, el compilador establece este atributo automáticamente. Sin embargo, si quiere depurar una compilación de versión nooptimizada, debe establecer DebuggableAttribute agregando la línea siguiente en el archivo AssemblyInfo.cpp de la aplicación:

    [assembly:System::Diagnostics::DebuggableAttribute(true, true)];
    

    Para obtener más información, vea DebuggableAttribute.

Uso de la depuración Just-In-Time

Este ejemplo le guía a través de la depuración Just-in-Time cuando una aplicación produce un error.

  • Debe tener Instalado Visual Studio para seguir estos pasos. Si no tiene Visual Studio, puede descargar la versión gratuita Visual Studio Community Edition.

  • Asegúrese de que la depuración Just-in-Time está habilitada en Herramientas>Opciones>Depuración>Just-in-Time.

En este ejemplo, creas una aplicación de consola en C# en Visual Studio que lanza una NullReferenceException.

  1. En Visual Studio, cree una aplicación de consola de C# (Archivo>Nuevo>Proyecto>Visual C#>Aplicación de consola) llamada ThrowsNullException. Para obtener más información sobre cómo crear proyectos en Visual Studio, consulte Tutorial: Creación de una aplicación sencilla.

  2. Cuando el proyecto se abra en Visual Studio, abra el archivo Program.cs. Reemplace el método Main() por el código siguiente, que imprime una línea en la consola y, a continuación, inicia una excepción NullReferenceException:

    static void Main(string[] args)
    {
        Console.WriteLine("we will now throw a NullReferenceException");
        throw new NullReferenceException("this is the exception thrown by the console app");
    }
    
  3. Para compilar la solución, elija la configuración Depurar (predeterminada) o Versión y, a continuación, seleccione Compilación>Recompilar solución.

    Nota

    • Elija la configuración Depurar para obtener una experiencia de depuración completa.
    • Si selecciona la configuración Versión, deberá desactivar Solo mi código para que este procedimiento funcione. En Herramientas>Opciones>Depuración, anule la selección de Habilitar Solo mi código.

    Para obtener más información sobre las configuraciones de compilación, consulte Descripción de las configuraciones de compilación.

  4. Abra la aplicación compilada ThrowsNullException.exe en la carpeta del proyecto de C# (...\ThrowsNullException\ThrowsNullException\bin\Debug o ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Debería ver la siguiente ventana de comandos:

    Captura de pantalla de la consola de ThrowsNullException.exe, que produce una excepción de referencia nula no controlada (System.NullReferenceException).

  5. Se abrirá el cuadro de diálogo Elegir depurador Just-in-Time.

    Captura de pantalla del cuadro de diálogo Elegir depurador Just-in-Time, el cual aparece después de mostrarse la excepción en la ventana de la consola de ThrowsNullException.exe.

    En Available Debuggers (Depuradores disponibles), seleccione Nueva instancia de <versión o edición preferida de Visual Studio>, si aún no la ha seleccionado.

  6. Seleccione Aceptar.

    El proyecto ThrowsNullException se abre en una nueva instancia de Visual Studio, con la ejecución detenida en la línea que produjo la excepción:

    Captura de pantalla del proyecto ThrowsNullException en Visual Studio, con resaltado de la línea de código fuente que produjo la excepción.

Puede iniciar la depuración en este punto. Si va a depurar una aplicación real, deberá averiguar por qué el código está produciendo la excepción.

Advertencia

Si la aplicación contiene código que no es de confianza, aparece un cuadro de diálogo de advertencia de seguridad, lo que le permite decidir si desea continuar con la depuración. Antes de continuar con la depuración, decida si confía en el código. ¿Ha escrito el código usted mismo? Si la aplicación se ejecuta en una máquina remota, ¿reconoce el nombre del proceso? Si la aplicación se ejecuta localmente, considere la posibilidad de que el código malintencionado se ejecute en el equipo. Si decide que el código es confiable, seleccione OK. En caso contrario, haga clic en Cancelar.

Solución de problemas de depuración Just-In-Time

Si la depuración Just-in-Time no se inicia cuando una aplicación se bloquea, aunque esté habilitada en Visual Studio:

  • Un problema conocido de Windows podría provocar un error en el depurador Just-In-Time.

    La solución consiste en agregar un valor DWORD de Automático, con los datos de valor de 1, en las siguientes claves del Registro:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

    • (Para aplicaciones de 32 bits en máquinas de 64 bits) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Los informes de errores de Windows podrían asumir el manejo de errores en su equipo.

    Para corregir este problema, use el editor del Registro para agregar un valor DWORD de Deshabilitado, con los datos de valor de 1, a las siguientes claves del Registro:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

    • (Para aplicaciones de 32 bits en máquinas de 64 bits) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    Para obtener más información, vea Configuración de WER.

Es posible que vea los siguientes mensajes de error durante la depuración Just-in-Time:

  • No se puede adjuntar al proceso de bloqueo. El programa especificado no es un programa de Windows o MS-DOS.

    El depurador intentó asociarse a un proceso que se ejecuta en otro usuario.

    Para solucionar este problema, en Visual Studio, abra Depurar>Asociar al proceso (o presione Ctrl + Alt + P) y busque el proceso que desea depurar en la lista Procesos disponibles. Si desconoce el nombre del proceso, busque el identificador del proceso en el cuadro de diálogo Depurador Just-in-Time de Visual Studio. Seleccione el proceso en la lista de procesos disponibles y seleccione Asociar. Seleccione No para descartar el cuadro de diálogo del depurador Just-In-Time.

  • Depurador no se pudo iniciar porque ningún usuario ha iniciado sesión.

    No hay ningún usuario que haya iniciado sesión en la consola, por lo que no hay ninguna sesión de usuario para mostrar el cuadro de diálogo de depuración Just-In-Time.

    Para solucionar este problema, inicie sesión en la máquina.

  • Clase no registrada.

    El depurador intentó crear una clase COM que no está registrada, probablemente debido a un problema de instalación.

    Para solucionar este problema, use el Instalador de Visual Studio para reinstalar o reparar la instalación de Visual Studio.