Share via


Depuración con el depurador Just-In-Time 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 empezar a depurar cuando se produce un problema.

La depuración Just-in-Time es compatible con aplicaciones de escritorio de Windows. No es compatible con las aplicaciones universales de Windows ni con el código administrado que se hospeda en una aplicación nativa, como los visualizadores.

Sugerencia

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.

    Enable or disable JIT debugging

    Nota:

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

  2. En el cuadro Habilitar la depuración Just-in-Time de estos tipos de código, seleccione los tipos de código que desee que depure la depuración Just-in-Time: Administrado, Nativo 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 Editor del Registro, busque y elimine las siguientes entradas del registro, si existen:

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

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

    JIT registry key

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

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

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

    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 Windows Forms tienen un controlador de excepciones de nivel superior que permite que la aplicación siga ejecutándose si se puede recuperar. Si una aplicación Windows Forms produce una excepción no controlada, muestra el siguiente cuadro de diálogo:

Windows Form unhandled exception

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_aplicación>.exe.config, establezca el valor 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 la opción /Zi y sin la opción /Og, el compilador establece este atributo automáticamente. Pero si desea depurar una compilación de versión no optimizada, deberá establecer DebuggableAttribute agregando la siguiente línea 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 aún no tiene Visual Studio, puede descargar y usar la edición gratis de Visual Studio Community.

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

En este ejemplo se crea una aplicación de consola de C# en Visual Studio que produce una excepción 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 la creación de proyectos en Visual Studio, vea Tutorial: Crear una aplicación sencilla.

  2. Cuando se abra el proyecto en Visual Studio, abra el archivo Program.cs. Reemplace el método Main() por el siguiente código, que imprime una línea en la consola y, a continuación, produce 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 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:

    Screenshot of the console for ThrowsNullException.exe, which throws an unhandled null reference exception (System.NullReferenceException).

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

    Screenshot of the Choose Just-In-Time Debugger dialog box, which appears after the exception appears in the ThrowsNullException.exe console window.

    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:

    Screenshot of the ThrowsNullException project in Visual Studio, with highlighting of the line of source code that threw the exception.

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.

Precaución

Si la aplicación contiene código que no es de confianza, aparecerá un cuadro de diálogo de advertencia de seguridad 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. ¿Escribió el código usted mismo? Si la aplicación se ejecuta en un equipo remoto, ¿reconoce el nombre del proceso? Si la aplicación se ejecuta de forma local, considere la posibilidad de que se ejecute código malintencionado en el equipo. Si decide que el código es de confianza, seleccione Aceptar. En caso contrario, haga clic en Cancelar.

Solución de problemas de la 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\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

    • (Para máquinas de 32 bits) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Informe de errores de Windows podría asumir el control de errores del 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\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    • (Para máquinas de 32 bits) HKEY_LOCAL_MACHINE\Software\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 para 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.

  • No se pudo iniciar el depurador porque no hay usuarios conectados.

    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 una sesión en el equipo.

  • No se ha registrado la clase.

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

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