Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Erweitern Sie im Dialogfeld "Debugoptionen" (oder "Extras") > den Abschnitt "Debugging>", und aktivieren Sie das Kontrollkästchen "Native Bearbeitung aktivieren und fortfahren".
Alle inkompatiblen Compiler- oder Linkereinstellungen verursachen einen Fehler beim Bearbeiten und Fortsetzen.
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
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/bigobjwird 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*.propsDatei), 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.
Verknüpfungseinschränkungen
Linkeroptionen, die "Edit and Continue" deaktivieren
Die folgenden Linkeroptionen deaktivieren die Bearbeiten-und-Fortsetzen-Funktion:
Das Festlegen von /OPT:REF, /OPT:ICF oder /INCREMENTAL:NO deaktiviert "Bearbeiten" und "Weiter" mit der folgenden Warnung:
LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specificationDurch Festlegen von /ORDER, /RELEASE oder /FORCE wird Bearbeiten und Fortsetzen mit der folgenden Warnung deaktiviert:
LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specificationDurch Festlegen einer Option, die die Erstellung einer Programmdatenbankdatei (PDB) verhindert, wird "Bearbeiten" und "Weiter" ohne spezifische Warnung deaktiviert.
Einschränkungen für die automatische Neuverknüpfung
Standardmäßig verknüpft Edit and Continue Ihr Programm am Ende einer Debugsitzung erneut, um eine ausführbare Datei auf den aktuellen Stand zu bringen.
Bearbeiten und Fortfahren können Ihr Programm nicht erneut verknüpfen, wenn Sie es von einem anderen Speicherort als dem ursprünglichen Buildspeicherort debuggen. Eine Meldung teilt Ihnen mit, dass Sie manuell neu erstellen müssen.
"Bearbeiten" und "Weiter" erstellt keine statischen Bibliotheken neu. Wenn Sie Änderungen an einer statischen Bibliothek mithilfe von "Bearbeiten" und "Weiter" vornehmen, müssen Sie die Bibliothek manuell neu erstellen und Apps erneut verknüpfen, die sie verwenden.
"Bearbeiten" und "Weiter" rufen keine benutzerdefinierten Buildschritte auf. Wenn Ihr Programm benutzerdefinierte Buildschritte verwendet, möchten Sie möglicherweise manuell neu erstellen, damit diese aufgerufen werden können. In diesem Fall können Sie das Neulinken nach "Bearbeiten" und "Weiter" deaktivieren, um sicherzustellen, dass Sie dazu gefordert werden, manuell neu zu erstellen.
So deaktivieren Sie die erneute Verknüpfung nach "Bearbeiten" und "Fortfahren":
Wählen Sie im Menü "Debuggen" die Option "Optionen" und "Einstellungen" aus.
Wählen Sie im Dialogfeld "Optionen " unter dem Knoten "Debuggen " den Knoten "Bearbeiten" und "Weiter " aus.
Deaktivieren Sie das Häkchen bei Code-Änderungen nach dem Debuggen relinken.
Vorkompilierte Headereinschränkungen
Standardmäßig lädt und verarbeitet die Funktion "Edit and Continue" vorkompilierte Kopfzeilen im Hintergrund, um die Verarbeitung von Codeänderungen zu beschleunigen. Das Laden vorkompilierter Header erfordert die Zuordnung des physischen Arbeitsspeichers. Dies kann ein Problem sein, wenn Sie auf einem Computer mit eingeschränktem RAM kompilieren. Sie können feststellen, ob dies ein Problem sein könnte, indem Sie den Windows Task-Manager verwenden, um die Menge des verfügbaren physischen Arbeitsspeichers beim Debuggen zu ermitteln. Wenn dieser Betrag größer als die Größe der vorkompilierten Kopfzeilen ist, sollte "Bearbeiten" und "Weiter" kein Problem haben. Wenn die Menge kleiner als die Größe der vorkompilierten Kopfzeilen ist, können Sie verhindern, dass Edit and Continue vorkompilierte Kopfzeilen im Hintergrund geladen wird.
So deaktivieren Sie das Laden von vorkompilierten Kopfzeilen für "Bearbeiten" und "Weiter":
Wählen Sie im Menü "Debuggen" die Option "Optionen" und "Einstellungen" aus.
Wählen Sie im Dialogfeld "Optionen " unter dem Knoten "Debuggen " den Knoten "Bearbeiten" und "Weiter " aus.
Deaktivieren Sie das Kontrollkästchen "Vorkompilierung zulassen ".
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:
Öffnen Sie eine Entwickler-Eingabeaufforderung.
Führen Sie den folgenden Befehl aus:
VsRegEdit.exe set “C:\Program Files\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1VsRegEdit.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, führen die verschiedenen Komponenten von "Edit and Continue" dazu, dass ausführliche Protokolle im , Abschnitt >, ausgegeben werden.