Sdílet prostřednictvím


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 se ale nedají 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í kompilace (Vlastnosti projektu > )

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

  • Linker > Obecné > povolení přírůstkového propojení: Ano (/INCREMENTAL)

    Jakékoli nekompatibilní nastavení linkeru (například /SAFESEH, nebo /OPT:...) může 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 (možnosti ladění > )

Otevřete podokno Debug (nebo Nástroje) >Možnosti, a rozbalte část Všechna nastavení>Debugging>.NET/C++ Za tepla.

Otevřete dialogové okno ladění (nebo nástroje) >Možnosti a rozbalte část ladění>.NET/C++ Rychlé načtení.

Pokud chcete tuto funkci povolit, vyberte jednu nebo všechny následující možnosti:

  • Povolit opětovné načítání za provozu: Povolí opětovné načítání za provozu při spuštění s připojeným ladicím programem (F5).

  • Povolit Hot Reload při spuštění bez ladění: Povolí Hot Reload při spuštění bez připojeného ladicího programu (Ctrl + F5).

  • Povolit Hot Reload při uložení souboru: Povolí Hot Reload při uložení souboru.

  • Úroveň podrobnosti protokolování: Nastavte úroveň podrobnosti protokolování, když je povolené Hot Reload. Zvolte možnost Minimální (výchozí), Podrobná nebo Diagnostická.

Změna těchto nastavení ovlivní všechny projekty, na které pracujete. Po změně nastavení nemusíte aplikaci znovu sestavit. Pokud aplikaci sestavíte z příkazového řádku nebo ze souboru pravidel, ale ladíte ji v prostředí sady Visual Studio, můžete i přesto použít příkaz Upravit a pokračovat, pokud nastavíte /ZI možnost.

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 případech

  • Změny souborů prostředků

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

  • Změny kódu bez odpovídajícího souboru PDB.

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

  • Úpravy lambda v následujících scénářích:

    • Pokud mají lambda statického nebo globálního člena.
    • Když předáte lambdy do std::function. Tato metoda způsobuje skutečné porušení ODR a vede k 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ů MSVC v120 a přepínač C/C++ /bigobj . Funkce Editovat a pokračovat /bigobj je podporována pouze v nástrojích pro sestavení MSVC v140 a novějších.

  • 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.

  • Ladění aplikace pomocí připojení namísto spuštění aplikace pomocí Spustit v nabídce Ladění.

  • Ladění optimalizovaného kódu

  • Ladění staré verze kódu poté, co se novou verzi nepodařilo sestavit kvůli chybám při sestavování.

  • Použití vlastní cesty kompilátoru (cl.exe) Z bezpečnostních důvodů Visual Studio při funkci Edit and Continue vždy při překompilaci souboru 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ů MSVC ** S nástrojem MSVC v140 výchozí ladicí program podporuje funkci Edit and Continue pro aplikace X86 i X64. Starší sady nástrojů podporují pouze aplikace X86. Sady nástrojů starší než MSVC v120 by měly používat starší ladicí program tak, že zaškrtnete "Možnosti > ladění > Obecné > Použít nativní režim kompatibility", aby bylo možné použít Upravit a pokračovat.

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ář nevyhovuje žá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

Nastavení této hodnoty na začátku ladicí relace způsobí, že různé komponenty Edit and Continue začnou zobrazovat podrobné protokoly v podokně Ladění okna >.