Podporované změny kódu (C++)

Funkce Upravit a pokračovat pro projekty C++ zpracovává většinu typů změn kódu. Některé změny však nelze použít během provádění programu. Pokud chcete tyto změny použít, musíte zastavit provádění a sestavit novou verzi kódu.

Informace o práci s funkcí Upravit a pokračovat pro jazyk C++ v sadě Visual Studio najdete v tématu Upravit a pokračovat (C++ ).

Požadavky

Nastavení sestavení (vlastnosti projektu > ):

  1. Obecný formát informací o ladění C/C++>: Programová databáze pro úpravy a pokračování ()/ZI>

  2. Obecné > povolení přírůstkového propojení linkeru>: Ano (/INCREMENTAL)

    Všechna nekompatibilní nastavení linkeru (například /SAFESEH, nebo /OPT:...) by měla způsobit upozornění LNK4075 během sestavování.
    Příklad: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Nastavení ladicího programu (Obecné možnosti > ladění>):

  • Povolit nativní úpravy a pokračovat

    Jakékoli nekompatibilní nastavení kompilátoru nebo linkeru způsobí chybu během úprav a pokračování.
    Příklad: 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.

Nepodporované změny

Následující změny C/C++ nelze použít během relace ladění. Pokud provedete některou z těchto změn a pokusíte se použít změny kódu, zobrazí se v okně Výstup chybová zpráva nebo upozornění.

  • Většina změn globálních nebo statických dat

  • Změny spustitelných souborů, které se kopírují z jiného počítače a nejsou sestaveny místně.

  • Změny datového typu, které ovlivňují rozložení objektu, například datových členů třídy.

  • Přidání více než 64 tisíc bajtů nového kódu nebo dat

  • Přidání proměnných, které vyžadují konstruktor v bodě před ukazatelem instrukce.

  • Změny, které mají vliv na kód vyžadující inicializaci za běhu

  • Přidání obslužných rutin výjimek v některých instancích

  • Změny souborů prostředků

  • Změny kódu v souborech jen pro čtení.

  • Změní kód bez odpovídajícího souboru PDB.

  • Změny kódu, který neobsahuje žádný soubor objektu.

  • Úprava lambda, které:
    • Mít statického nebo globálního člena.
    • Jsou předány do funkce std::. To způsobí skutečné porušení odR a výsledkem C1092.
  • Funkce Upravit a pokračovat neaktualizuje statické knihovny. Pokud provedete změnu ve statické knihovně, provádění pokračuje ve staré verzi a nevystaví se žádné upozornění.

Nepodporované scénáře

Funkce Upravit a pokračovat pro C/C++ není dostupná v následujících scénářích ladění:

  • Ladění nativních aplikací zkompilovaných pomocí /Zo (vylepšení optimalizovaného ladění)

  • Projekty, které používají sadu nástrojů VC 120 a přepínač C/C++ /bigobj . Funkce Upravit a pokračovat /bigobj se podporuje pouze v sadě nástrojů VC 140.

  • Ladění ve smíšeném režimu (nativní nebo spravované)

  • Ladění JavaScriptu

  • Ladění SQL

  • Ladění souboru s výpisem paměti

  • Úpravy kódu po neošetřené výjimce, pokud není vybrána možnost Unwind the Call Stack on unhandled exceptions option.

  • Ladění aplikace pomocí příkazu Připojit místo spuštění aplikace pomocí příkazu Spustit v nabídce Ladění

  • Ladění optimalizovaného kódu

  • Ladění staré verze kódu po nové verzi se nepodařilo sestavit kvůli chybám sestavení.

  • Použití vlastní cesty kompilátoru (cl.exe). Z bezpečnostních důvodů sada Visual Studio při úpravách a pokračování při překompilace souboru vždy používá nainstalovaný kompilátor. Pokud používáte vlastní cestu kompilátoru (například prostřednictvím vlastní $(ExecutablePath) proměnné v *.props souboru), zobrazí se upozornění a Sada Visual Studio se vrátí k použití nainstalovaného kompilátoru stejné verze nebo architektury.

  • Starší architektury / sady nástrojů VC S sadou nástrojů VC 140 podporuje výchozí ladicí program funkce Upravit a pokračovat s aplikacemi X86 i X64. Starší sady nástrojů podporují pouze aplikace X86. Sady nástrojů starší než VC 120 by měly používat starší ladicí program tak, že zaškrtnete "Možnosti > ladění > Obecné > použití nativního režimu kompatibility", aby bylo možné použít upravit a pokračovat.

Omezení propojení

Možnosti linkeru, které zakazují úpravy a pokračování

Následující možnosti linkeru zakazují úpravy a pokračování:

  • Nastavení /OPT:REF, /OPT:ICF nebo /INCREMENTAL:NO zakáže úpravy a pokračovat následujícím upozorněním:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • Nastavení /ORDER, /RELEASE nebo /FORCE zakáže funkci Upravit a pokračovat s následujícím upozorněním:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

  • Nastavení libovolné možnosti, která brání vytvoření souboru databáze programu (PDB), zakáže úpravy a pokračovat bez konkrétního upozornění.

Omezení automatického opětovného propojení

Ve výchozím nastavení funkce Upravit a pokračovat znovu propojí program na konci ladicí relace a vytvoří tak aktuální spustitelný soubor.

Pokud program ladíte z jiného umístění než původního umístění sestavení, nemůžete program upravit a pokračovat. Zpráva vám řekne, že je potřeba znovu sestavit ručně.

Funkce Upravit a pokračovat nepřebuduje statické knihovny. Pokud provedete změny statické knihovny pomocí funkce Upravit a pokračovat, budete muset knihovnu znovu sestavit ručně a znovu propojit aplikace pomocí ní.

Funkce Upravit a pokračovat nevyvolává vlastní kroky sestavení. Pokud program používá vlastní kroky sestavení, je nutné provést ruční opětovné sestavení, aby se vyvolaly vlastní kroky sestavení. V tom případě je možné vypnout propojování po funkci Upravit a pokračovat, aby bylo zaručeno, že budete vyzváni, abyste provedli ruční znovu sestavení.

Zakázání opětovného propojení po úpravě a pokračování

  1. V nabídce Ladění zvolte Možnosti a Nastavení.

  2. V dialogovém okně Možnosti v uzlu Ladění a vyberte uzel Upravit a pokračovat.

  3. Zrušte zaškrtnutí políčka Znovu propojit kód po ladění.

Omezení předkompilovaných hlaviček

Ve výchozím nastavení funkce Upravit a pokračovat načítá a zpracovává předkompilované hlavičky na pozadí, aby se urychlilo zpracování změn kódu. Načtení předkompilovaných hlaviček vyžaduje přidělení fyzické paměti, což může být problém, pokud kompilujete na počítači s omezenou pamětí RAM. Pokud chcete zjistit, jestli to může být problém, můžete pomocí Správce úloh systému Windows určit množství dostupné fyzické paměti při ladění. Pokud je tato hodnota vyšší než velikost předkompilovaných hlaviček, pak by funkce Upravit a pokračovat neměla mít problém. Pokud je velikost předkompilovaných hlaviček menší než velikost, můžete zabránit načtení předkompilovaných hlaviček na pozadí úpravou a pokračováním.

Zakázání načítání předkompilovaných hlaviček na pozadí pro úpravy a pokračování

  1. V nabídce Ladění zvolte Možnosti a Nastavení.

  2. V dialogovém okně Možnosti v uzlu Ladění a vyberte uzel Upravit a pokračovat.

  3. Zrušte zaškrtnutí políčka Povolit předkompilování.

Omezení atributů IDL

Funkce Upravit a pokračovat nevygeneruje soubory jazyka IDL (Interface Definition Language). Změny atributů IDL se proto při ladění neprojeví. Pokud chcete zobrazit výsledek změn atributů IDL, musíte zastavit ladění a znovu sestavit aplikaci. Funkce Upravit a pokračovat negeneruje chybu nebo upozornění, pokud se změnily atributy IDL. Další informace naleznete v tématu Atributy IDL.

Diagnostika problémů

Pokud váš scénář neodpovídá žádné z výše uvedených podmínek, můžete získat další podrobnosti nastavením následující hodnoty registru DWORD:

  1. Otevřete příkazový řádek pro vývojáře.
  2. Spusťte následující příkaz:
    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

Nastavení této hodnoty na začátku ladicí relace způsobí, že různé komponenty Edit and Continue odesílané podrobné protokolování do podokna Ladění okna výstupu.>