Modifiche al codice supportate (C++)

Modifica e continuazione per i progetti C++ gestisce la maggior parte dei tipi di modifiche al codice. Alcune modifiche non possono tuttavia essere applicate durante l'esecuzione del programma. Per applicare tali modifiche, è necessario arrestare l'esecuzione e compilare una versione aggiornata 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 > ):

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

  2. Linker > Generale > Abilitare il collegamento incrementale: Sì (/INCREMENTAL)

    Eventuali impostazioni del linker incompatibili (ad esempio /SAFESEH, o /OPT:...) devono causare un avviso LNK4075 durante la compilazione.
    Esempio: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Impostazioni del debugger (Opzioni > di debug > Generale):

  • Abilitare la modifica e la continuazione native

    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 a dati globali o statici.

  • Le modifiche a file eseguibili copiati da un altro computer e non compilati localmente.

  • Le modifiche a un tipo di dati che hanno effetto sul layout di un oggetto, ad esempio i membri dati di una classe.

  • Aggiunta di più di 64 KB di nuovo codice o nuovi dati.

  • Aggiunta di variabili che richiedono un costruttore in un punto precedente al puntatore all'istruzione.

  • Modifiche che interessano il codice per il quale è necessaria l'inizializzazione di runtime.

  • Aggiunta di gestori di eccezioni, in alcune istanze.

  • Modifiche di file di risorse.

  • Modifiche del codice di file di sola lettura.

  • Modifiche del codice privo di un file PDB corrispondente.

  • Modifiche del codice privo di un file oggetto.

  • Modifica delle espressioni lambda che:
    • Avere un membro statico o globale.
    • Vengono passati a una funzione std::function. In questo modo si verifica una violazione ODR autentica e si verifica un errore C1092.
  • Le librerie statiche non vengono aggiornate con la funzionalità Modifica e continuazione. Se si apporta una modifica in una libreria statica, l'esecuzione continua con la versione precedente e non viene visualizzato alcun avviso.

Scenari non supportati

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

  • Debug di applicazioni native compilate con /Zo (Ottimizzare il debug)

  • Progetti che usano il set di strumenti VC 120 e l'opzione C/C++ /bigobj . Modifica e continuazione con /bigobj è supportato solo nel set di strumenti VC 140.

  • Debug in modalità mista (nativo/gestito).

  • Debug javaScript.

  • Debug SQL.

  • Debug di un file dump.

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

  • Debug di un'app usando Connetti a invece di eseguire l'app da Start nel menu Debug .

  • Debug di codice ottimizzato.

  • Debug di una versione precedente del codice dopo l'esito negativo della compilazione di una nuova versione a causa di errori di compilazione.

  • 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.

  • Architetture legacy/set di strumenti vc. Con il set di strumenti VC 140, 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 VC 120 devono usare il debugger legacy selezionando "Opzioni > di debug > Generale > Usa modalità compatibilità nativa" per usare Modifica e continuazione.

Limitazioni di collegamento

Opzioni dei linker che disabilitano Modifica e continuazione

La funzionalità Modifica e continuazione viene disabilitata dalle seguenti opzioni dei linker:

  • L'impostazione di /OPT:REF, /OPT:ICFo /INCREMENTAL:NO provoca la disattivazione di Modifica e continuazione con la visualizzazione del seguente messaggio di avviso:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • L'impostazione di /ORDER, /RELEA edizione Standard 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 provoca la disattivazione di Modifica e continuazione senza la visualizzazione di un messaggio di avviso specifico.

Limitazioni di ricollegamento automatico

Per impostazione predefinita, il programma viene ricollegato automaticamente al termine di una sessione di debug in modalità Modifica e continuazione per creare un eseguibile aggiornato.

Se il debug viene effettuato da una posizione diversa dal percorso di compilazione originale, non sarà possibile eseguire il ricollegamento automatico. La necessità di eseguire la ricompilazione manualmente viene segnalata con un apposito messaggio.

Le librerie statiche non vengono ricompilate in modalità Modifica e continuazione. Se si apportano modifiche a una libreria statica con Modifica e continuazione, è necessario ricompilare manualmente la libreria e ricollegare le app che la usano.

Le istruzioni di compilazione personalizzate non vengono richiamate in modalità Modifica e continuazione. Se il programma usa istruzioni di compilazione personalizzate, sarà possibile effettuare manualmente la ricompilazione affinché tali istruzioni possano essere richiamate. In tal caso, è possibile disabilitare il ricollegamento dopo Modifica e continuazione per fare in modo che venga chiesto se si desidera procedere alla ricompilazione manuale.

Per disabilitare il ricollegamento dopo Modifica e continuazione

  1. Scegliere Opzioni e impostazioni dal menu Debug.

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

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

Limitazioni delle intestazioni precompilate

Per impostazione predefinita, in Modifica e continuazione le intestazioni precompilate vengono caricate ed elaborate in background per velocizzare l'elaborazione delle modifiche al codice. Il caricamento delle intestazioni precompilate richiede l'allocazione di memoria fisica, il che può rappresentare un problema se si effettua la compilazione usando un computer che dispone di una quantità limitata di RAM. È possibile determinare se ciò può costituire un problema usando Gestione attività di Windows per verificare la quantità di memoria fisica disponibile durante il debug. Se la quantità di memoria supera le dimensioni delle intestazioni precompilate, Modifica e continuazione non dovrebbe presentare alcun problema. Se tale quantità è inferiore alle dimensioni delle intestazioni precompilate, è possibile configurare Modifica e continuazione in modo da evitare che le intestazioni precompilate vengano caricate in background.

Per disabilitare il caricamento in background delle intestazioni precompilate da parte di Modifica e continuazione

  1. Scegliere Opzioni e impostazioni dal menu Debug.

  2. Nella finestra di dialogo Opzioni nel 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). Le modifiche agli attributi IDL non verranno pertanto riflesse mentre si esegue il debug. Per visualizzare il risultato delle modifiche agli attributi IDL è necessario interrompere il debug e ricompilare l'app. Se gli attributi IDL sono stati modificati, non verrà generato alcun errore o avviso. Per altre informazioni, vedere Attributi IDL.

Diagnosi dei problemi

Se lo scenario non soddisfa le condizioni indicate in precedenza, è possibile raccogliere ulteriori 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 Modifica e Continuazione attivano la registrazione dettagliata nel riquadro Debug finestra>di output.