Freigeben über


Unterstützte Codeänderungen (C++)

Bearbeiten und Fortfahren für C++-Projekte behandeln die meisten Arten von Codeänderungen. Einige Änderungen können jedoch während der Programmausführung nicht angewendet werden. Um diese Änderungen anzuwenden, müssen Sie die Ausführung beenden und eine neue Version des Codes erstellen.

Informationen zum Arbeiten mit "Bearbeiten" und "Weiter" in Visual Studio finden Sie unter "Bearbeiten und Fortsetzen" (C++ ).

Anforderungen

Einstellungen für den Build (Projekt > Eigenschaften)

  • C/C++ > Allgemeines > Debuginformationsformat: Programmdatenbank zum Bearbeiten und Fortsetzen (/ZI)

  • Linker > Allgemeine > Inkrementelle Verknüpfung aktivieren: Ja (/INCREMENTAL)

    Alle inkompatiblen Linkereinstellungen, wie z. B. /SAFESEH, /OPT:..., können beim Buildvorgang die Warnung LNK4075 verursachen. Beispiel: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Debuggereinstellungen (Debug-Optionen >)

Öffnen Sie den Bereich "Debug" (oder "Extras") >Optionen, und erweitern Sie den Abschnitt Alle Einstellungen>Debugging>.NET/C++ Hot Reload.

Öffnen Sie das Dialogfeld "Debugoptionen( oder Tools)>", und erweitern Sie den Abschnitt"Debugging.NET>/C++ Hot Reload".

Wählen Sie eine oder alle der folgenden Optionen aus, um das Feature zu aktivieren:

  • Hot Reload aktivieren: Aktiviert hot Reload beim Starten mit dem angefügten Debugger (F5).

  • Aktivieren Des Hot Reload beim Starten ohne Debugging: Aktiviert Hot Reload beim Starten ohne angefügten Debugger (STRG + F5).

  • 'Hot Reload' beim Speichern von Dateien aktivieren: Aktiviert 'Hot Reload', wenn die Datei gespeichert wird.

  • Ausführliche Protokollierung: Legen Sie die Protokollierungsebene fest, wenn "Hot Reload" aktiviert ist. Wählen Sie aus "Minimal " (Standard), "Detailliert" oder "Diagnose" aus.

Das Ändern dieser Einstellungen wirkt sich auf alle Projekte aus, an der Sie arbeiten. Sie müssen Ihre Anwendung nach dem Ändern einer Einstellung nicht neu erstellen. Wenn Sie Ihre Anwendung über die Befehlszeile oder aus einer Makefile erstellen, aber in der Visual Studio-Umgebung debuggen, können Sie weiterhin "Bearbeiten" und "Weiter" verwenden, wenn Sie die /ZI Option festlegen.

Nicht unterstützte Änderungen

Die folgenden C/C++-Änderungen können während einer Debugsitzung nicht angewendet werden. Wenn Sie eine dieser Änderungen vornehmen und dann versuchen, Codeänderungen anzuwenden, wird im Ausgabefenster eine Fehlermeldung oder Warnmeldung angezeigt.

  • Die meisten Änderungen an globalen oder statischen Daten.

  • Änderungen an ausführbaren Dateien, die von einem anderen Computer kopiert und nicht lokal erstellt werden.

  • Änderungen an einem Datentyp, die sich auf das Layout eines Objekts auswirken, z. B. Datenmember einer Klasse.

  • Hinzufügen von mehr als 64k Bytes neuer Code oder Daten.

  • Hinzufügen von Variablen, die einen Konstruktor an einem Punkt vor dem Anweisungszeiger erfordern.

  • Änderungen, die sich auf Code auswirken, der die Laufzeitinitialisierung erfordert.

  • Hinzufügen von Ausnahmehandlern in einigen Fällen.

  • Änderungen an Ressourcendateien.

  • Änderungen an Code in schreibgeschützten Dateien.

  • Änderungen an Code ohne entsprechende PDB-Datei.

  • Änderungen an Code ohne Objektdatei.

  • Ändern von Lambdas in den folgenden Szenarien:

    • Wenn Lambdas über ein statisches oder globales Element verfügen.
    • Wenn Sie Lambdas an ein std::function übergeben. Diese Methode verursacht eine echte ODR-Verletzung und führt zu C1092.
  • "Bearbeiten" und "Weiter" aktualisiert keine statischen Bibliotheken. Wenn Sie eine Änderung in einer statischen Bibliothek vornehmen, wird die Ausführung mit der alten Version fortgesetzt, und es wird keine Warnung ausgegeben.

Nicht unterstützte Szenarien

Bearbeiten und Fortfahren für C/C++ ist in den folgenden Debugszenarien nicht verfügbar:

  • Debuggen nativer Apps, die mit /Zo kompiliert wurden (Optimieren des optimierten Debuggings)

  • Projekte, die das Toolset MSVC v120 und den C/C++ /bigobj -Switch verwenden. Bearbeiten und Fortsetzen mit /bigobj wird nur in den MSVC v140- und späteren Buildtools unterstützt.

  • Debuggen im gemischten Modus (systemeigene/verwaltete)

  • JavaScript-Debugging.

  • SQL-Debugging.

  • Debuggen einer Speicherabbilddatei

  • Bearbeiten des Codes nach einer unbehandelten Ausnahme, wenn die Option Aufrufstapel bei unbehandelten Ausnahmen auflösen nicht ausgewählt ist.

  • Debuggen einer App durch Verwenden von "Anfügen an" anstelle des Startens der App über die Auswahl von "Start" im Menü "Debuggen".

  • Debugging von optimiertem Code.

  • Debuggen einer alten Version des Codes, nachdem eine neue Version aufgrund von Buildfehlern nicht erstellt werden konnte.

  • Verwenden eines benutzerdefinierten Compilerpfads (cl.exe). Aus Sicherheitsgründen verwendet Visual Studio für die erneute Kompilierung einer Datei während des Bearbeitens und Fortsetzens immer den installierten Compiler. Wenn Sie einen benutzerdefinierten Compilerpfad verwenden (z. B. durch eine benutzerdefinierte $(ExecutablePath) Variable in Ihrer *.props Datei), wird eine Warnung angezeigt, und Visual Studio greift auf die Verwendung des installierten Compilers derselben Version/Architektur zurück.

  • Legacy-Architekturen/MSVC-Toolsets. Mit dem MSVC v140-Toolset unterstützt der Standarddebugger "Bearbeiten" und "Weiter" sowohl X86- als auch X64-Anwendungen. Legacy-Toolsets unterstützen nur X86-Anwendungen. Toolsets, die älter als MSVC v120 sind, sollten den Legacy-Debugger verwenden, indem Sie "Debug > Optionen > Allgemein > Nativen Kompatibilitätsmodus verwenden" überprüfen, um Edit and Continue zu nutzen.

Beschränkungen der IDL-Attribute

"Bearbeiten" und "Weiter" generiert keine IDL-Dateien (Interface Definition Language). Daher werden Änderungen an IDL-Attributen während des Debuggens nicht wiedergegeben. Um das Ergebnis von Änderungen an IDL-Attributen anzuzeigen, müssen Sie das Debuggen beenden und Ihre App neu erstellen. "Bearbeiten" und "Weiter" generieren keinen Fehler oder eine Warnung, wenn IDL-Attribute geändert wurden. Weitere Informationen finden Sie unter IDL-Attribute.

Diagnostizieren von Problemen

Wenn Ihr Szenario keiner der oben genannten Bedingungen entspricht, können Sie weitere Details erfassen, indem Sie den folgenden DWORD-Registrierungswert festlegen:

  1. Öffnen Sie eine Entwickler-Eingabeaufforderung.

  2. Führen Sie den folgenden Befehl aus:

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

Wenn Sie diesen Wert zu Beginn einer Debugsitzung festlegen, führen die verschiedenen Komponenten von "Edit and Continue" dazu, dass ausführliche Protokolle im , Abschnitt >, ausgegeben werden.