Freigeben über


Unterstützte Codeänderungen (C++)

Mit „Bearbeiten und Fortfahren“ für C++-Projekte können die meisten Arten von Codeänderungen behandelt werden. Einige Änderungen können während der Programmausführung jedoch nicht übernommen werden. Um diese Änderungen zu übernehmen, müssen Sie die Ausführung anhalten und eine neue Version des Codes erstellen.

Weitere Informationen zur Verwendung von „Bearbeiten und Fortfahren“ für C++ in Visual Studio finden Sie unter Bearbeiten und Fortfahren (C++).

Anforderungen

Buildeinstellungen (Projekt > Eigenschaften):

  1. C/C++ > Allgemein > Debug-Informationsformat: Programmdatenbank für Bearbeiten und Fortsetzen (/ZI)

  2. Linker > Allgemein Inkrementelles > Verknüpfen aktivieren: Ja (/INCREMENTAL)

    Bei nicht kompatiblen Linker-Einstellungen (beispielsweise /SAFESEH oder /OPT:) tritt während des Buildvorgangs die Warnung LNK4075 auf.
    Ein Beispiel: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Debuggereinstellungen (Debuggen > Optionen > Allgemein):

  • Natives Bearbeiten und Fortfahren aktivieren

    Bei Verwendung nicht kompatibler Compiler- oder Linker-Einstellungen tritt beim Bearbeiten und Fortfahren ein Fehler auf.
    Ein Beispiel: 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.

Nicht unterstützte Änderungen

Folgende C-/C++-Änderungen können nicht im Rahmen einer Debugsitzung angewendet werden. Wenn Sie eine dieser Änderungen vornehmen und anschließend versuchen, die Codeänderungen zu übernehmen, wird im Fenster Ausgabe eine Warnung oder eine Fehlermeldung angezeigt.

  • Die meisten Änderungen an globalen oder statischen Daten.

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

  • Änderungen an Datentypen, die das Layout eines Objekts beeinflussen (z. B. Datenmember einer Klasse).

  • Hinzufügen von mehr als 64 KB neuen Codes oder neuer Daten.

  • Hinzufügen von Variablen, die an einer Stelle vor dem Anweisungszeiger einen Konstruktor benötigen.

  • Änderungen, die sich auf Code auswirken, der eine Laufzeitinitialisierung benötigt.

  • Das Hinzufügen von Ausnahmehandlern in bestimmten Instanzen.

  • Änderungen an Ressourcendateien.

  • Änderungen an Code in schreibgeschützten Dateien.

  • Änderungen am Code ohne entsprechende PDB-Datei.

  • Änderungen an Code ohne Objektdatei.

  • Ändern von Lambdas, die:
    • über einen statischen oder globalen Member verfügen.
    • an eine Funktion vom Typ „std::function“ übergeben werden. Dies führt zu einer echten ODR-Verletzung und hat den Fehler C1092 zur Folge.
  • Von "Bearbeiten und Fortfahren" werden keine statischen Bibliotheken aktualisiert. Wenn Sie eine Änderung an einer statischen Bibliothek vornehmen, wird die Ausführung ohne Warnung mit der alten Version fortgeführt.

Nicht unterstützte Szenarien

"Bearbeiten und Fortfahren" steht für C/C++ in den folgenden Debugszenarien nicht zur Verfügung:

  • Debuggen von systemeigenen Apps, die mit /zo (Optimiertes Debuggen verbessern)kompiliert sind

  • Projekten, die das VC 120-Toolset und die C-/C++-Option /bigobj verwenden. „Bearbeiten und Fortfahren“ mit /bigobj wird nur im VC 140-Toolset unterstützt.

  • Debuggen im gemischten Modus (systemeigen/verwaltet).

  • Debuggen von JavaScript.

  • SQL-Debuggen.

  • Debuggen einer Dumpdatei.

  • Bearbeiten von Code nach einer nicht behandelten Ausnahme, wenn die Option Aufrufliste für unbehandelte Ausnahmen entladen nicht aktiviert ist.

  • Debuggen einer App über Anfügen an , anstatt die App durch Auswählen von Start im Menü Debuggen auszuführen.

  • Debuggen von optimiertem Code.

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

  • Verwenden eines benutzerdefinierten Compilerpfads (cl.exe). Aus Sicherheitsgründen wird von Visual Studio bei der Neukompilierung einer Datei während des Bearbeitens und Fortfahrens immer der installierte Compiler verwendet. Bei Verwendung eines benutzerdefinierten Compilerpfads (beispielsweise über eine benutzerdefinierte Variable vom Typ $(ExecutablePath) in der Datei *.props) wird eine Warnung angezeigt, und Visual Studio greift auf den installierten Compiler der gleichen Version/Architektur zurück.

  • Legacyarchitekturen/VC-Toolsets. Bei Verwendung des VC 140-Toolsets wird „Bearbeiten und Fortfahren“ vom Standarddebugger sowohl für x86- als auch für x64-Anwendungen unterstützt. Von älteren Toolsets werden nur x86-Anwendungen unterstützt. Von Toolsets vor VC 120 muss der Legacydebugger verwendet werden. Aktivieren Sie hierzu unter Debuggen > Optionen > Allgemein > die Option „Systemeigenen Kompatibilitätsmodus verwenden“, um „Bearbeiten und Fortfahren“ verwenden zu können.

Einschränkungen für Verknüpfungen

Optionen des Linkers, durch die "Bearbeiten und Fortfahren" deaktiviert wird

Die folgenden Optionen des Linkers deaktivieren Bearbeiten und Fortfahren:

  • Durch die Einstellung /OPT:REF, /OPT:ICFoder /INCREMENTAL:NO wird Bearbeiten und Fortfahren deaktiviert. Folgende Warnung wird angezeigt:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • Durch Festlegen von /ORDER, /RELEASE oder /FORCE wird „Bearbeiten und Fortfahren“ deaktiviert und folgende Warnung angezeigt:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

  • Durch das Festlegen einer beliebigen Option, die die Erstellung einer Programmdatenbankdatei (.pdb) verhindert, wird Bearbeiten und Fortfahren deaktiviert, wobei keine spezifische Warnung ausgegeben wird.

Automatisches Neuverknüpfen von Einschränkungen

In der Standardeinstellung wird durch Bearbeiten und Fortfahren das Programm am Ende der Debugsitzung neu gebunden, um eine aktuelle ausführbare Datei zu erstellen.

Bearbeiten und Fortfahren kann das Programm nicht erneut binden, wenn Sie an einer anderen Position als der der ursprünglichen Erstellung debuggen. Ihnen wird in einer Meldung mitgeteilt, dass Sie manuell neu erstellen müssen.

Bearbeiten und Fortfahren erstellt keine statischen Bibliotheken neu. Wenn Sie eine statische Bibliothek mit "Bearbeiten und Fortfahren" ändern, müssen Sie die Bibliothek manuell neu erstellen und die Apps anschließend mit der neuen Bibliothek erneut verknüpfen.

Durch Bearbeiten und Fortfahren können keine benutzerdefinierten Schritte aufgerufen werden. Wenn das Programm auf benutzerdefinierten Buildschritten beruht, können Sie es manuell neu erstellen, damit benutzerdefinierte Buildschritte aufgerufen werden können. In diesem Fall können Sie die erneute Bindung nach Ausführen von Bearbeiten und Fortfahren deaktivieren. Dies gewährleistet, dass Sie aufgefordert werden, diese manuell neu zu erstellen.

So deaktivieren Sie das erneute Binden nach "Bearbeiten und Fortfahren"

  1. Klicken Sie im Menü Debuggen auf Optionen und Einstellungen.

  2. Öffnen Sie im Dialogfeld Optionen den Knoten Debugging , und wählen Sie den Knoten Bearbeiten und Fortfahren aus.

  3. Deaktivieren Sie das Kontrollkästchen Codeänderungen nach dem Debuggen erneut binden .

Einschränkungen für vorkompilierte Header

Durch Bearbeiten und Fortfahren werden vorkompilierte Header standardmäßig im Hintergrund geladen und verarbeitet, um die Verarbeitung von Codeänderungen zu beschleunigen. Zum Laden vorkompilierter Header muss physischer Speicher belegt werden. Daher können beim Kompilieren auf einem Computer mit begrenztem Arbeitsspeicher Probleme auftreten. Sie können feststellen, ob möglicherweise ein solches Problem besteht, indem Sie mithilfe des Windows Task-Managers den während des Debuggens verfügbaren physischen Speicher bestimmen. Wenn dabei die Größe der vorkompilierten Header überschritten wird, kann Bearbeiten und Fortfahren problemlos ausgeführt werden. Wenn der Speicherplatz geringer als die vorkompilierten Header ist, können Sie das Laden von vorkompilierten Headern im Hintergrund durch Bearbeiten und Fortfahren verhindern.

So deaktivieren Sie das Laden vorkompilierter Header im Hintergrund für "Bearbeiten und Fortfahren"

  1. Klicken Sie im Menü Debuggen auf Optionen und Einstellungen.

  2. Öffnen Sie im Dialogfeld Optionen den Knoten Debugging , und wählen Sie den Knoten Bearbeiten und Fortfahren aus.

  3. Deaktivieren Sie das Kontrollkästchen Präkompilierung zulassen .

Einschränkungen für IDL-Attribute

Bearbeiten und Fortfahren unterstützt nicht das Neugenerieren von IDL-Dateien (Interface Definition Language). Aus diesem Grund werden Änderungen an IDL-Attributen während des Debuggens nicht widergespiegelt. Wenn Sie die Ergebnisse von Änderungen an IDL-Attributen anzeigen möchten, müssen Sie das Debuggen beenden und die App neu erstellen. "Bearbeiten und Fortfahren" erzeugt keinen Fehler bzw. keine Fehlermeldung, wenn IDL-Attribute geändert wurden. Weitere Informationen finden Sie unter IDL-Attribute.

Diagnostizieren von Problemen

Sollte für Ihr Szenario keine der oben genannten Bedingungen zutreffen, können Sie durch Festlegen des folgenden DWORD-Registrierungswerts weitere Details sammeln:

  1. Öffnen Sie eine Developer-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
    VsRegEdit.exe set “C:\Program Files (x86)\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1

Wenn Sie diesen Wert zu Beginn einer Debugsitzung festlegen, werden im Bereich Ausgabefenster>Debuggen ausführliche Protokollierungsinformationen der verschiedenen Komponenten von „Bearbeiten und Fortfahren“ ausgegeben.