Ondersteunde codewijzigingen (C++)

Het Hot Reload mechanisme, voorheen Bewerken en Doorgaan genoemd, verwerkt de meeste typen codewijzigingen. Sommige wijzigingen kunnen echter niet worden toegepast tijdens het uitvoeren van het programma. Als u deze wijzigingen wilt toepassen, moet u de uitvoering stoppen en een nieuwe versie van de code bouwen.

Zie Hot Reload (C++) voor informatie over het werken met Hot Reload voor C++ in Visual Studio.

Requirements

Bouwinstellingen (Projecteigenschappen >)

  • C/C++ > Algemene > foutopsporingsgegevensindeling: Programmadatabase voor bewerken en doorgaan (/ZI)

  • Linker > Algemeen > incrementeel koppelen inschakelen: Ja (/INCREMENTAL)

    Alle incompatibele linkerinstellingen (zoals /SAFESEH, of /OPT:...) kunnen de waarschuwing LNK4075 veroorzaken tijdens de build. Voorbeeld: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Instellingen voor foutopsporingsprogramma (Opties voor foutopsporing > )

Open het Debug (of Tools) >Opties deelvenster, en vouw de Alle instellingen>Debugging>.NET/C++ Hot Reload sectie uit.

Open het Debug (of Extra) >Opties dialoogvenster en vouw de sectie Debugging>.NET/C++ Hot Reload uit.

Selecteer een of alle volgende opties om de functie in te schakelen:

  • Hot Reload inschakelen: hiermee schakelt u Hot Reload in wanneer u begint met het gekoppelde foutopsporingsprogramma (F5).

  • Hot Reload inschakelen bij het starten zonder foutopsporing: hiermee schakelt u Hot Reload in wanneer u start zonder het gekoppeldefoutopsporingsprogramma (Ctrl + F5).

  • Dynamisch opnieuw laden inschakelen bij bestand opslaan: hiermee schakelt u Dynamisch opnieuw laden in wanneer het bestand wordt opgeslagen.

  • Verbaal logniveau: Stel het niveau van logboekregistratie in wanneer Hot Reload is ingeschakeld. Kies uit Minimaal (standaard), Gedetailleerd of Diagnostisch.

Het wijzigen van deze instellingen is van invloed op alle projecten waaraan u werkt. U hoeft uw toepassing niet opnieuw te bouwen nadat u een instelling hebt gewijzigd. Als u uw toepassing bouwt vanuit de opdrachtregel of vanuit een makefile, maar u fouten opspoort in de Visual Studio-omgeving, kunt u nog steeds Bewerken en Doorgaan gebruiken als u de /ZI optie instelt.

Niet-ondersteunde wijzigingen

De volgende C/C++-wijzigingen kunnen niet worden toegepast tijdens een foutopsporingssessie. Als u een van deze wijzigingen aanbrengt en vervolgens codewijzigingen probeert toe te passen, wordt er een foutbericht of waarschuwingsbericht weergegeven in het venster Uitvoer .

  • De meeste wijzigingen in globale of statische gegevens.

  • Wijzigingen in uitvoerbare bestanden die worden gekopieerd van een andere computer en niet lokaal worden gebouwd.

  • Wijzigingen in een gegevenstype die van invloed zijn op de indeling van een object, zoals gegevensleden van een klasse.

  • Meer dan 64.000 bytes aan nieuwe code of gegevens toevoegen.

  • Variabelen toevoegen waarvoor een constructor op een punt vóór de instructiepointer is vereist.

  • Wijzigingen die van invloed zijn op code waarvoor runtime-initialisatie is vereist.

  • Uitzonderingshandlers toevoegen in sommige gevallen.

  • Wijzigingen in resourcebestanden.

  • Wijzigingen in code in alleen-lezen bestanden.

  • Wijzigingen in code zonder een bijbehorend PDB-bestand.

  • Wijzigingen in code die geen objectbestand heeft.

  • Lambdas wijzigen in de volgende scenario's:

    • Wanneer lambdas een statisch of globaal lid heeft.
    • Wanneer je lambdas doorgeeft aan een std::function. Deze methode veroorzaakt een legitieme ODR-schending en resulteert in C1092.
  • Hot Reload werkt statische bibliotheken niet bij. Als u een wijziging aanbrengt in een statische bibliotheek, wordt de uitvoering voortgezet met de oude versie en wordt er geen waarschuwing gegeven.

Niet ondersteunde scenario's

Hot Reload voor C/C++ is niet beschikbaar in de volgende foutopsporingsscenario's:

  • Debuggen van native apps die zijn gecompileerd met /Zo (Verbeterde foutopsporing voor geoptimaliseerde code)

  • Projecten die gebruikmaken van de MSVC v120-toolset en de C/C++ /bigobj -switch. Bewerken en doorgaan met /bigobj wordt alleen ondersteund in de MSVC v140- en latere buildhulpprogramma's.

  • Foutopsporing in de gemengde modus (systeemeigen/beheerd).

  • JavaScript-foutopsporing.

  • SQL-foutopsporing.

  • Een dumpbestand debuggen.

  • Code bewerken na een niet-verwerkte uitzondering, wanneer de optie oproepstack ontwinden bij niet-verwerkte uitzonderingen niet is geselecteerd.

  • Foutopsporing voor een app door gebruik te maken van Koppelen aan in plaats van de app te starten door Start te kiezen in het Foutopsporing menu.

  • Geoptimaliseerde code voor foutopsporing.

  • Foutopsporing van een oude versie van uw code nadat een nieuwe versie niet kon worden gebouwd vanwege buildfouten.

  • Een aangepast compilerpad (cl.exe) gebruiken. Om veiligheidsredenen gebruikt Visual Studio altijd de geïnstalleerde compiler voor hercompilatie van een bestand tijdens Hot Reload. Als u een aangepast compilerpad gebruikt (bijvoorbeeld via een aangepaste $(ExecutablePath) variabele in uw *.props bestand), wordt er een waarschuwing weergegeven en wordt Visual Studio teruggezet op het gebruik van de geïnstalleerde compiler van dezelfde versie/architectuur.

  • Verouderde architecturen/MSVC-toolsets. Met de MSVC v140-toolset ondersteunt het standaarddebugger Hot Reload met zowel X86- als X64-toepassingen. Verouderde hulpprogramma's ondersteunen alleen X86-toepassingen. Toolsets ouder dan MSVC v120 moeten de legacy debugger gebruiken door 'Foutopsporings > Opties > Algemeen > Gebruik van de systeemeigen compatibiliteitsmodus' te controleren om Bewerken en Doorgaan te gebruiken.

Beperkingen van IDL-attributen

Hot Reload genereert geen IDL-bestanden (Interface Definition Language). Daarom worden wijzigingen in IDL-attributen niet doorgevoerd tijdens het debuggen. Als u het resultaat van wijzigingen in IDL-kenmerken wilt zien, moet u de foutopsporing stoppen en de app opnieuw opbouwen. Hot Reload genereert geen fout of waarschuwing als IDL-kenmerken zijn gewijzigd. Zie IDL-kenmerken voor meer informatie.

Problemen diagnosticeren

Als uw scenario niet voldoet aan een van de bovenstaande voorwaarden, kunt u meer informatie verzamelen door de volgende DWORD-registerwaarde in te stellen:

  1. Open een opdrachtprompt voor ontwikkelaars.

  2. Voer de volgende opdracht uit:

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

Als u deze waarde instelt bij de start van een foutopsporingssessie, worden de verschillende onderdelen van Hot Reload uitgebreide logboekgegevens naar het deelvenster Output Window>Debug uitgevoerd.