Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Redigera och fortsätt för C++-projekt hanterar de flesta typer av kodändringar. Vissa ändringar kan dock inte tillämpas under programkörningen. Om du vill tillämpa dessa ändringar måste du stoppa körningen och skapa en ny version av koden.
Mer information om hur du arbetar med Redigera och Fortsätt för C++ i Visual Studio finns i Redigera och fortsätt (C++ ).
Kravspecifikation
Bygginställningar (projektegenskaper > ):
C/C++ > Allmänt > informationsformat för felsökning: Programdatabas för redigering och fortsätt (
/ZI)Länkare > Allmän > aktivera inkrementell länkning: Ja (
/INCREMENTAL)Alla inkompatibla länkningsinställningar (till exempel
/SAFESEH, eller/OPT:...) bör orsaka varning LNK4075 under bygget.
Exempel:LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification
Inställningar för felsökningsprogram (Felsökningsalternativ >> Allmänt):
Aktivera intern redigering och fortsätt
Eventuella inkompatibla kompilator- eller länkningsinställningar orsakar ett fel under Redigera och Fortsätt.
Exempel: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.
Ändringar som inte stöds
Följande C/C++-ändringar kan inte tillämpas under en felsökningssession. Om du gör någon av dessa ändringar och sedan försöker tillämpa kodändringar visas ett fel eller varningsmeddelande i utdatafönstret .
De flesta ändringar i globala eller statiska data.
Ändringar i körbara filer som kopieras från en annan dator och inte skapas lokalt.
Ändringar i en datatyp som påverkar layouten för ett objekt, till exempel datamedlemmar i en klass.
Lägga till mer än 64 000 byte ny kod eller data.
Lägga till variabler som kräver en konstruktor vid en punkt före instruktionspekaren.
Ändringar som påverkar kod som kräver körningstidinitiering.
Lägga till undantagshanterare, i vissa fall.
Ändringar i resursfiler.
Ändringar i kod i skrivskyddade filer.
Ändringar i kod utan motsvarande PDB-fil.
Ändringar i kod som inte har någon objektfil.
- Ändra lambdas som:
- Ha en statisk eller global medlem.
- Skickas till en std::function. Detta orsakar en verklig ODR-överträdelse och resulterar i C1092.
- Redigera och fortsätt uppdaterar inte statiska bibliotek. Om du gör en ändring i ett statiskt bibliotek fortsätter körningen med den gamla versionen och ingen varning utfärdas.
Scenarier som inte stöds
Redigera och fortsätt för C/C++ är inte tillgänglig i följande felsökningsscenarier:
Felsökning av interna appar som kompilerats med /Zo (Förbättra optimerad felsökning)
Projekt som använder MSVC v120-verktygsuppsättningen och C/C++
/bigobj-växeln. Redigera och fortsätta med/bigobjstöds endast i byggverktygen MSVC v140 och senare.Felsökning i blandat läge (intern/hanterad).
JavaScript-felsökning.
SQL-felsökning.
Felsöka en dumpfil.
Redigering av kod efter ett ohanterat undantag, när alternativet Varva ned anropsstacken för ohanterade undantag inte är markerat.
Felsöka en app med Anslut till i stället för att köra appen genom att välja Startapå felsökningsmenyn.
Felsökning av optimerad kod.
Felsöka en gammal version av koden efter att en ny version inte kunde skapas på grund av byggfel.
Använda en anpassad kompileringsväg (cl.exe). Av säkerhetsskäl använder Visual Studio alltid den installerade kompilatorn för omkompilering av en fil under Redigera och Fortsätt. Om du använder en anpassad kompilatorsökväg (till exempel via en anpassad
$(ExecutablePath)variabel i*.propsfilen) visas en varning och Visual Studio återgår till att använda den installerade kompilatorn med samma version/arkitektur.Äldre arkitekturer/MSVC-verktygsuppsättningar. Med verktygsuppsättningen MSVC v140 stöder standardfelsökaren Redigera och Fortsätt med både X86- och X64-program. Äldre verktygsuppsättningar stöder endast X86-program. Verktygsuppsättningar som är äldre än MSVC v120 bör använda det äldre felsökningsprogrammet genom att kontrollera "Felsöka > alternativ > Allmänt > Använd inbyggt kompatibilitetsläge" för att använda Redigera och Fortsätt.
Länkningsbegränsningar
Länkalternativ som inaktiverar Redigera och Fortsätt
Följande länkalternativ inaktiverar Redigera och Fortsätt:
Inställningen /OPT:REF, /OPT:ICF eller /INCREMENTAL:NO inaktiverar Redigera och fortsätt med följande varning:
LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specificationInställningen /ORDER, /RELEASE eller /FORCE inaktiverar Redigera och Fortsätt med följande varning:
LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specificationOm du anger ett alternativ som förhindrar att en programdatabasfil (.pdb) skapas inaktiveras Redigera och Fortsätt utan någon specifik varning.
Begränsningar för automatisk omlänkning
Som standardinställning länkar Redigera och Fortsätt om ditt program i slutet av en felsökningssession för att skapa en uppdaterad körbar fil.
"Edit and Continue kan inte relänka din applikation om du felsöker den från en annan plats än den ursprungliga byggplatsen." Ett meddelande anger att du måste återskapa manuellt.
Redigera och fortsätt återskapar inte statiska bibliotek. Om du gör ändringar i ett statiskt bibliotek med redigera och fortsätt måste du återskapa biblioteket manuellt och länka om appar med det.
Redigera och Fortsätt anropar inte anpassade byggsteg. Om ditt program använder anpassade byggsteg kanske du vill återskapa manuellt så att anpassade byggsteg kan anropas. I så fall kan du inaktivera omlänkning efter Redigera och Fortsätt för att se till att du uppmanas att återskapa manuellt.
Inaktivera omlänkning efter redigering och fortsätt
På menyn Felsök väljer du Alternativ och inställningar.
I dialogrutan Alternativ går du till noden Felsökning och väljer noden Redigera och Fortsätt .
Avmarkera kryssrutan Ta bort relänkningskodändringar efter felsökning.
Förkompilerade rubrikbegränsningar
Som standard laddar och bearbetar Edit and Continue förkompilerade headers i bakgrunden för att påskynda bearbetningen av kodändringar. Inläsning av förkompilerade huvuden kräver allokering av fysiskt minne, vilket kan vara ett problem om du kompilerar på en dator med begränsat RAM-minne. Du kan avgöra om det kan vara ett problem med hjälp av Aktivitetshanteraren för Windows för att fastställa mängden tillgängligt fysiskt minne när du felsöker. Om den här mängden är större än storleken på dina förkompilerade huvuden bör Redigera och Fortsätt inte stöta på några problem. Om beloppet är mindre än storleken på dina förkompilerade rubriker kan du förhindra att Redigera och Fortsätt läser in förkompilerade rubriker i bakgrunden.
Inaktivera bakgrundsinläsning av förkompilerade rubriker för Redigera och Fortsätt
På menyn Felsök väljer du Alternativ och inställningar.
I dialogrutan Alternativ går du till noden Felsökning och väljer noden Redigera och Fortsätt .
Avmarkera kryssrutan Tillåt förkompilering .
Begränsningar för IDL-attribut
Redigera och fortsätt återskapar inte IDL-filer (Interface Definition Language). Därför återspeglas inte ändringar i IDL-attribut när du felsöker. Om du vill se resultatet av ändringar i IDL-attribut måste du sluta felsöka och återskapa appen. Redigera och Fortsätt genererar inte ett fel eller en varning om IDL-attribut har ändrats. Mer information finns i IDL-attribut.
Diagnostisera problem
Om ditt scenario inte passar något av de villkor som nämns ovan kan du samla in ytterligare information genom att ange följande DWORD-registervärde:
- Öppna en utvecklarkommandotolk.
- Kör följande kommando:
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
Om du anger det här värdet i början av en felsökningssession kan de olika komponenterna av Edit and Continue generera omfattande loggning till utdatafönstrets>. Debug panel.