Condividi tramite


Modifiche al codice supportate (C++)

Modifica e continuazione per i progetti C++ gestisce la maggior parte dei tipi di modifiche al codice. Tuttavia, alcune modifiche non possono essere applicate durante l'esecuzione del programma. Per applicare queste modifiche, è necessario arrestare l'esecuzione e compilare una nuova versione del codice.

Per informazioni sull'uso di Modifica e continuazione per C++ in Visual Studio, vedere Modifica e continuazione (C++ ).

Requisiti

Impostazioni di compilazione (Proprietà Progetto >)

  • C/C++ > Formato generale > delle informazioni di debug: Database di programma per modifica e continuazione (/ZI)

  • Linker > Abilitazione generale > del collegamento incrementale: Sì (/INCREMENTAL)

    Qualsiasi impostazione del linker incompatibile (ad esempio /SAFESEH, o /OPT:...) può causare l'avviso LNK4075 durante la compilazione. Esempio: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Impostazioni del debugger (opzioni di debug > )

Aprire il riquadro Debug (o Strumenti) > ed espandere la sezione OpzioniTutte le impostazioni>Debug>.NET/C++ Hot Reload.

Aprire la finestra di dialogo Opzioni (o Strumenti) >Opzioni, ed espandere la sezione Debugging>.NET/C++ Hot Reload.

Selezionare una o tutte le opzioni seguenti per abilitare la funzionalità:

  • Abilita ricaricamento rapido: abilita il ricaricamento rapido quando si inizia con il debugger collegato (F5).

  • Abilita ricaricamento rapido quando si avvia senza eseguire il debug: abilita ricaricamento rapido all'avvio senza il debugger collegato (CTRL + F5).

  • Abilita ricaricamento rapido nel salvataggio file: abilita il ricaricamento rapido quando il file viene salvato.

  • Dettagli di registrazione: impostare il livello di registrazione quando il ricaricamento rapido è abilitato. Scegliere tra Minimo (impostazione predefinita), Dettagliato o Diagnostico.

La modifica di queste impostazioni influisce su tutti i progetti su cui si lavora. Non è necessario ricompilare l'applicazione dopo aver modificato un'impostazione. Se si compila l'applicazione dalla riga di comando o da un makefile, ma si esegue il debug nell'ambiente di Visual Studio, è comunque possibile usare Modifica e continuazione se si imposta l'opzione /ZI .

Nella finestra di dialogo Opzioni (o Strumenti) , espandere la sezione DebuggingGenerale e selezionare la casella di controllo Abilita Modifica Continua Nativa.

Tutte le impostazioni del compilatore o del linker incompatibili causano un errore durante modifica e continuazione.
Esempio: Edit and Continue : error : ‘file.cpp’ in ‘MyApp.exe’ was not compiled with Edit and Continue enabled. Ensure that the file is compiled with the Program Database for Edit and Continue (/ZI) option.

Modifiche non supportate

Non è possibile applicare le modifiche C/C++ seguenti durante una sessione di debug. Se si apporta una di queste modifiche e quindi si tenta di applicare modifiche al codice, viene visualizzato un messaggio di errore o di avviso nella finestra Output .

  • La maggior parte delle modifiche apportate ai dati globali o statici.

  • Modifiche ai file eseguibili copiati da un altro computer e non compilati localmente.

  • Modifiche a un tipo di dati che influiscono sul layout di un oggetto, ad esempio i membri dati di una classe.

  • Aggiunta di più di 64.000 byte di nuovi dati o codice.

  • Aggiunta di variabili che richiedono un costruttore in un punto prima del puntatore all'istruzione.

  • Modifiche che influiscono sul codice che richiede l'inizializzazione in fase di esecuzione.

  • Aggiunta di gestori di eccezioni, in alcuni casi.

  • Modifiche ai file di risorse.

  • Modifiche al codice nei file di sola lettura.

  • Modifiche al codice senza un file PDB corrispondente.

  • Modifiche al codice senza file oggetto.

  • Modifica delle espressioni lambda negli scenari seguenti:

    • Quando le espressioni lambda hanno un membro statico o globale.
    • Quando si passano espressioni lambda a un oggetto std::function. Questo metodo causa una violazione ODR autentica e restituisce C1092.
  • Modifica e continuazione non aggiorna le librerie statiche. Se si apporta una modifica in una libreria statica, l'esecuzione continua con la versione precedente e non viene generato alcun avviso.

Scenari non supportati

Modifica e continuazione per C/C++ non è disponibile negli scenari di debug seguenti:

  • Debug di app native compilate con /Zo (Migliorare il debug ottimizzato)

  • Progetti che usano il set di strumenti MSVC v120 e l'opzione C/C++ /bigobj . Modifica e continuazione con /bigobj è supportato solo negli strumenti di compilazione MSVC v140 e versioni successive.

  • Debug in modalità mista (nativa/gestita).

  • Debug javaScript.

  • Debug SQL.

  • Debug di un file di dump.

  • Modifica del codice dopo un'eccezione non gestita, quando l'opzione Rimuovi lo stack di chiamate in eccezioni non gestite non è selezionata.

  • Eseguire il debug di un'app usando Connetti a anziché eseguire l'app scegliendo Avvia dal menu Debug .

  • Debug di codice ottimizzato.

  • Eseguire il debug di una vecchia versione del codice dopo che la compilazione di una nuova versione è fallita a causa di errori di build.

  • Uso di un percorso del compilatore personalizzato (cl.exe). Per motivi di sicurezza, per la ricompilazione di un file durante modifica e continuazione, Visual Studio usa sempre il compilatore installato. Se si usa un percorso del compilatore personalizzato, ad esempio tramite una variabile personalizzata $(ExecutablePath) nel *.props file, viene visualizzato un avviso e Visual Studio esegue il fallback all'uso del compilatore installato della stessa versione/architettura.

  • Set di strumenti Legacy Architectures/MSVC. Con il set di strumenti MSVC v140, il debugger predefinito supporta Modifica e Continua con le applicazioni X86 e X64. I set di strumenti legacy supportano solo le applicazioni X86. I set di strumenti precedenti a MSVC v120 devono usare il debugger legacy selezionando "Opzioni > di debug > generale > Usa la modalità compatibilità nativa" per usare Modifica e Continuazione.

Limitazioni del collegamento

Opzioni del linker che disabilitano Modifica e Continuazione

Le opzioni del linker seguenti disabilitano Modifica e continuazione:

  • L'impostazione di /OPT:REF, /OPT:ICF o /INCREMENTAL:NO disabilita Modifica e continua con l'avviso seguente:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • L'impostazione /ORDER, /RELEASE o /FORCE disabilita Modifica e Continua con l'avviso seguente:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

  • L'impostazione di qualsiasi opzione che impedisce la creazione di un file di database di programma (con estensione pdb) disabilita Modifica e Continua senza alcun avviso specifico.

Limitazioni di ricollegamento automatico

Per impostazione predefinita, la funzione Modifica e Continua ricollega il programma alla fine di una sessione di debug per creare un eseguibile aggiornato.

Modifica e continuazione non può ricollegare il programma se si esegue il debug da un percorso diverso dal percorso di compilazione originale. Un messaggio indica che è necessario ricompilare manualmente.

Modifica e continuazione non ricompila le librerie statiche. Se si apportano modifiche a una libreria statica usando Modifica e continuazione, è necessario ricompilare manualmente la libreria e ricollegare le app usandola.

Modifica e continuazione non richiama i passaggi di compilazione personalizzati. Se il programma usa passaggi di compilazione personalizzati, è possibile ricompilare manualmente in modo che sia possibile richiamare i passaggi di compilazione personalizzati. In tal caso, è possibile disabilitare il collegamento dopo Modifica e Continuazione per assicurarsi di dover ricompilare manualmente.

Per disabilitare il ricollegamento dopo Modifica e continuazione:

  1. Scegliere Opzioni e impostazioni dal menu Debug.

  2. Nella finestra di dialogo Opzioni , sotto il nodo Debug , selezionare il nodo Modifica e continuazione .

  3. Deselezionare la casella di controllo Ricollega le modifiche al codice dopo il debug.

Limitazioni dei file header precompilati

Per impostazione predefinita, Edit and Continue carica ed elabora le intestazioni precompilate in background per velocizzare l'elaborazione delle modifiche al codice. Il caricamento di intestazioni precompilate richiede l'allocazione della memoria fisica, che può essere un problema se si esegue la compilazione in un computer con RAM limitata. Puoi determinare se questo potrebbe essere un problema usando Gestione attività di Windows per determinare la quantità di memoria fisica disponibile durante il debug. Se questa quantità è maggiore della dimensione delle intestazioni precompilate, Edit and Continue non dovrebbe riscontrare alcun problema. Se la quantità è inferiore alle dimensioni delle intestazioni precompilate, è possibile impedire a Modifica e continuazione di caricare intestazioni precompilate in background.

Per disabilitare il caricamento in background di intestazioni precompilate per Modifica e continuazione:

  1. Scegliere Opzioni e impostazioni dal menu Debug.

  2. Nella finestra di dialogo Opzioni , sotto il nodo Debug , selezionare il nodo Modifica e continuazione .

  3. Deselezionare la casella di controllo Consenti precompilazione .

Limitazioni degli attributi IDL

Modifica e continuazione non rigenera i file IDL (Interface Definition Language). Di conseguenza, le modifiche apportate agli attributi IDL non vengono riflesse durante il debug. Per visualizzare il risultato delle modifiche apportate agli attributi IDL, è necessario arrestare il debug e ricompilare l'app. Modifica e continuazione non genera un errore o un avviso se gli attributi IDL sono stati modificati. Per altre informazioni, vedere Attributi IDL.

Diagnosi dei problemi

Se lo scenario non soddisfa le condizioni indicate in precedenza, è possibile raccogliere altri dettagli impostando il valore del Registro di sistema DWORD seguente:

  1. Aprire un prompt dei comandi per gli sviluppatori.

  2. Esegui questo comando:

    VsRegEdit.exe set “C:\Program Files\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1

    VsRegEdit.exe set “C:\Program Files (x86)\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1

Impostando questo valore all'inizio di una sessione di debug, i vari componenti di Edit and Continue attivano la registrazione dettagliata nella finestra di output del riquadro Debug.