Eseguire il debug con il debugger JIT in Visual Studio

Il debug JIT può avviare automaticamente Visual Studio quando un'app in esecuzione all'esterno di Visual Studio si arresta in modo anomalo o si arresta in modo anomalo. Con il debug JIT, è possibile testare le app all'esterno di Visual Studio e aprire Visual Studio per avviare il debug quando si verifica un problema.

Il debug JIT funziona per le app desktop di Windows. Non funziona per le app di Windows universali o per il codice gestito ospitato in un'applicazione nativa, ad esempio i visualizzatori.

Suggerimento

Se si vuole solo arrestare la visualizzazione della finestra di dialogo Debugger JIT, ma non è installato Visual Studio, vedere Disabilitare il debugger JIT. Se Visual Studio è stato installato, potrebbe essere necessario disabilitare il debug JIT dal Registro di sistema di Windows.

Abilitare o disabilitare il debug JIT in Visual Studio

È possibile configurare il debug JIT dalla finestra di dialogo Opzioni strumenti di Visual Studio >(o Opzioni di debug).>

Nota

Per abilitare o disabilitare il debug JIT, è necessario eseguire Visual Studio come amministratore. L'abilitazione o la disabilitazione del debug JIT imposta una chiave del Registro di sistema e i privilegi di amministratore possono essere necessari per modificare tale chiave. Per aprire Visual Studio come amministratore, fare clic con il pulsante destro del mouse sull'app di Visual Studio e scegliere Esegui come amministratore.

Per abilitare o disabilitare il debug JIT:

  1. Nel menu Strumenti o Debug selezionare Opzioni>debug>JUST-In-Time.

    Abilitare o disabilitare il debug JIT

    Nota

    Se l'opzione di menu JUST-In-Time non viene visualizzata, assicurarsi che il debugger JUST-In-Time sia installato usando il Programma di installazione di Visual Studio.

  2. Nella casella Abilita debug JIT per questi tipi di codice selezionare i tipi di codice di cui si vuole eseguire il debug JIT: Gestito, Nativo e/o Script.

  3. Seleziona OK.

Se si abilita il debugger JIT, ma non si apre quando un'app si arresta in modo anomalo o si verificano errori, vedere Risolvere i problemi relativi al debug JIT.

Disabilitare il debug JIT dal Registro di sistema di Windows

Il debug JIT potrebbe essere ancora abilitato anche se Visual Studio non è più installato nel computer. Se Visual Studio non è più installato, è possibile disabilitare il debug JIT modificando il Registro di sistema di Windows.

Per disabilitare il debug JIT modificando il Registro di sistema:

  1. Dal menu Start di Windows eseguire l'editor del Registro di sistema (regedit.exe).

  2. Nella finestra Editor del Registro di sistema individuare ed eliminare le voci del Registro di sistema seguenti, se presenti:

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

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

    Chiave del Registro di sistema JIT

  3. Eliminare anche le voci del Registro di sistema seguenti, se presenti:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework\DbgManagedDebugger

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

    Assicurarsi di non eliminare o modificare altre chiavi del Registro di sistema.

  4. Chiudere la finestra Dell'editor del Registro di sistema.

Abilitare il debug JIT di un Windows Form

Per impostazione predefinita, le app di Windows Form hanno un gestore eccezioni di primo livello che consente all'app di continuare l'esecuzione se può essere ripristinata. Se un'app Windows Form genera un'eccezione non gestita, viene visualizzata la finestra di dialogo seguente:

Eccezione non gestita di Windows Form

Per abilitare il debug JIT anziché la gestione degli errori Standard di Windows Form, aggiungere queste impostazioni:

  • system.windows.forms Nella sezione del file machine.config o< nome> app.exe.config impostare il jitDebugging valore su true:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • In un'applicazione Windows Form C++ impostare anche su DebuggableAttribute true in un file con estensione config o nel codice. Se si esegue la compilazione con /Zi e senza /Og, il compilatore imposta automaticamente questo attributo. Se vuoi eseguire il debug di una build di versione non ottimizzata, devi tuttavia impostare DebuggableAttribute aggiungendo la riga seguente nel file AssemblyInfo.cpp dell'app:

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

    Per ulteriori informazioni, vedere DebuggableAttribute.

Usare il debug JIT

Questo esempio illustra il debug JIT quando un'app genera un errore.

  • Per seguire questa procedura, è necessario che Visual Studio sia installato. Se Visual Studio non è disponibile, è possibile scaricare visual Studio Community Edition gratuito.

  • Assicurarsi che il debug JIT sia abilitato in Opzioni>strumenti>Debug>JIT.

Per questo esempio si crea un'app console C# in Visual Studio che genera un'eccezione NullReferenceException.

  1. In Visual Studio creare un'app console C# (File>New>Project>Visual C#>Console Application) denominata ThrowsNullException. Per altre informazioni sulla creazione di progetti in Visual Studio, vedere Procedura dettagliata: Creare una semplice applicazione.

  2. Quando il progetto viene aperto in Visual Studio, aprire il file Program.cs . Sostituire il metodo Main() con il codice seguente, che stampa una riga nella console e quindi genera un'eccezione 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. Per compilare la soluzione, scegliere la configurazione Debug (impostazione predefinita) o Release e quindi selezionare Compila ricompila>soluzione.

    Nota

    Per altre informazioni sulle configurazioni della build, vedere Informazioni sulle configurazioni della build.

  4. Aprire l'app compilata ThrowsNullException.exe nella cartella del progetto C# (...\ThrowsNullException\ThrowsNullException\bin\Debug o ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Verrà visualizzata la finestra di comando seguente:

    Screenshot della console per ThrowsNullException.exe, che genera un'eccezione di riferimento Null non gestita (System.NullReferenceException).

  5. Verrà visualizzata la finestra di dialogo Scegli debugger JIT.

    Screenshot della finestra di dialogo Scegli debugger JIT che viene visualizzata dopo la visualizzazione dell'eccezione nella finestra della console ThrowsNullException.exe.

    In Debugger disponibili selezionare Nuova istanza della <versione/edizione> di Visual Studio preferita, se non è già selezionata.

  6. Seleziona OK.

    Il progetto ThrowsNullException viene aperto in una nuova istanza di Visual Studio, con l'esecuzione arrestata alla riga che ha generato l'eccezione:

    Screenshot del progetto ThrowsNullException in Visual Studio, con l'evidenziazione della riga di codice sorgente che ha generato l'eccezione.

A questo punto è possibile avviare il debug. Se si esegue il debug di un'app reale, è necessario scoprire perché il codice genera l'eccezione.

Attenzione

Se l'app contiene codice non attendibile, viene visualizzata una finestra di dialogo di avviso di sicurezza che consente di decidere se procedere con il debug. Prima di continuare il debug, decidere se considerare attendibile il codice. Se il codice è stato scritto da altri, Se l'applicazione è in esecuzione in un computer remoto, assicurarsi di riconoscere il nome del processo. Se l'app è in esecuzione in locale, prendere in considerazione la possibilità di eseguire codice dannoso nel computer. Se si decide che il codice è attendibile, selezionare OK. In caso contrario, selezionare Annulla.

Risolvere i problemi di debug JIT

Se il debug JIT non viene avviato quando un'app si arresta in modo anomalo, anche se è abilitata in Visual Studio:

  • Un problema noto di Windows potrebbe causare l'esito negativo del debugger JIT.

    La correzione consiste nell'aggiungere un valore DWORD auto, con i dati valore pari a 1, alle chiavi del Registro di sistema seguenti:

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

    • (Per le app a 32 bit in computer a 64 bit) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Segnalazione errori Windows potrebbe assumere la gestione degli errori nel computer.

    Per risolvere questo problema, usare l'editor del Registro di sistema per aggiungere un valore DWORD disabilitato, con i dati valore pari a 1, alle chiavi del Registro di sistema seguenti:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Segnalazione errori Windows

    • (Per le app a 32 bit in computer a 64 bit) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Segnalazione errori Windows

    Per altre informazioni, vedere . Impostazioni wer.

Durante il debug JIT potrebbero essere visualizzati i messaggi di errore seguenti:

  • Impossibile connettersi al processo bloccato. Il programma specificato non è un programma Windows o MS-DOS.

    Il debugger ha tentato di connettersi a un processo in esecuzione con un altro utente.

    Per risolvere questo problema, in Visual Studio aprire Debug>Collega a processo (o premere CTRL + ALT + P) e trovare il processo di cui si vuole eseguire il debug nell'elenco Processi disponibili. Se non si conosce il nome del processo, trovare l'ID processo nella finestra di dialogo Debugger JIT di Visual Studio. Selezionare il processo nell'elenco Processi disponibili e selezionare Connetti. Selezionare No per chiudere la finestra di dialogo debugger JIT.

  • Impossibile avviare il debugger perché nessun utente è connesso.

    Non è presente alcun utente connesso alla console, quindi non è disponibile alcuna sessione utente per visualizzare la finestra di dialogo di debug JIT.

    Per correggere questo problema, connettersi al computer.

  • Classe non registrata.

    Il debugger ha tentato di creare una classe COM non registrata, probabilmente a causa di un problema di installazione.

    Per risolvere il problema, usare il Programma di installazione di Visual Studio per reinstallare o ripristinare l'installazione di Visual Studio.