Megosztás a következőn keresztül:


Támogatott kódmódosítások (C++)

A C++-projektek szerkesztése és folytatása a kódmódosítások legtöbb típusát kezeli. Egyes módosítások azonban nem alkalmazhatók a program végrehajtása során. A módosítások alkalmazásához le kell állítania a végrehajtást, és létre kell készítenie a kód egy új verzióját.

A C++ szerkesztésével és folytatásával kapcsolatos információkért tekintse meg a Szerkesztés és folytatás (C++) szakaszt a Visual Studióban.

Requirements

Felépítési beállítások (Projekt tulajdonságok >)

  • C/C++ > Általános > hibakeresési információformátum: Programadatbázis szerkesztéshez és folytatáshoz (/ZI)

  • Csatoló > Általános > Növekményes csatolás engedélyezése: Igen (/INCREMENTAL)

    Az inkompatibilis csatolási beállítások (például /SAFESEH... vagy /OPT:...) okozhatják az LNK4075 figyelmeztetést a buildelés során. Példa: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Hibakereső beállításai (Hibakeresési > beállítások)

Nyissa meg a Hibakeresés (vagy Eszközök) >Beállítások panelt, és bontsa ki az Összes beállítás>hibakeresés .NET>/C++ Hot Reload szakaszt.

Nyissa meg a Hibakeresés (vagy Eszközök) >Beállítások párbeszédpanelt, és bontsa ki a Hibakeresés>.NET/C++ Hot Reload szakaszt.

A funkció engedélyezéséhez válassza az alábbi lehetőségek egyikét vagy mindegyikét:

  • Hot Reload engedélyezése: Engedélyezi a Hot Reload funkciót, amikor a hibakereső csatlakozik (F5).

  • Gyakori elérésű újratöltés engedélyezése hibakeresés nélküli indításkor: Engedélyezi a gyakori elérésű újratöltést, ha a hibakereső nincs csatlakoztatva (Ctrl + F5).

  • Gyakori elérésű újratöltés engedélyezése fájlmentéskor: Engedélyezi a gyakori újratöltést a fájl mentésekor.

  • Naplózás részletessége: Adja meg a naplózás szintjét, ha a Hot Reload engedélyezve van. Válasszon a Minimális (alapértelmezett), a Részletes vagy a Diagnosztikai lehetőség közül.

Ezeknek a beállításoknak a módosítása minden olyan projektet érint, amelyen dolgozik. A beállítások módosítása után nem kell újraépítenie az alkalmazást. Ha a parancssorból vagy egy makefile-ból hozza létre az alkalmazást, de hibakeresést hajt végre a Visual Studio-környezetben, akkor is használhatja a Szerkesztés és a Folytatás lehetőséget, ha be van állítva a /ZI beállítás.

A Hibakeresés (vagy eszközök) >beállításai párbeszédpanelen bontsa ki azÁltalános> szakaszt, és jelölje be a Natív szerkesztés és folytatás engedélyezése jelölőnégyzetet.

Az inkompatibilis fordító- vagy csatolóbeállítások hibát okoznak a szerkesztés és a folytatás során.
Példa: 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.

Nem támogatott módosítások

A hibakeresési munkamenetek során a következő C/C++ módosítások nem alkalmazhatók. Ha bármelyik módosítást végrehajtotta, majd megpróbál kódmódosításokat alkalmazni, hibaüzenet vagy figyelmeztető üzenet jelenik meg a Kimenet ablakban.

  • A globális vagy statikus adatok változásainak többsége.

  • A más gépről másolt és nem helyileg létrehozott végrehajtható elemek módosítása.

  • Olyan adattípus módosítása, amely befolyásolja egy objektum elrendezését, például egy osztály adattagjainak.

  • Több mint 64 000 bájtnyi új kód vagy adat hozzáadása.

  • Olyan változók hozzáadása, amelyek konstruktort igényelnek az utasításmutató előtt egy ponton.

  • A futásidejű inicializálást igénylő kódot érintő módosítások.

  • Kivételkezelők hozzáadása bizonyos esetekben.

  • Erőforrásfájlok módosítása.

  • A csak olvasható fájlokban lévő kód módosítása.

  • A kód módosítása a megfelelő PDB-fájl nélkül.

  • Olyan kód módosítása, amely nem rendelkezik objektumfájllal.

  • A lambdas módosítása a következő forgatókönyvekben:

    • Ha egy lambda-függvénynek statikus vagy globális tagja van.
    • Amikor lambdákat ad át egy std::function-nek. Ez a módszer valódi ODR-szabálysértést okoz, és C1092-t eredményez.
  • A Szerkesztés és folytatás nem frissíti a statikus kódtárakat. Ha módosít egy statikus kódtárat, a végrehajtás a régi verzióval folytatódik, és nincs figyelmeztetés.

Nem támogatott forgatókönyvek

A C/C++ szerkesztése és folytatása a következő hibakeresési forgatókönyvekben nem érhető el:

  • A /Zo használatával lefordított natív alkalmazások hibakeresése (optimalizált hibakeresés javítása)

  • Az MSVC v120 eszközkészletet és a C/C++ /bigobj kapcsolót használó projektek. Csak az MSVC v140 és újabb fordítóeszközök támogatják az "Edit and Continue" funkciót a /bigobj-val.

  • Vegyes módú (natív/felügyelt) hibakeresés.

  • JavaScript-hibakeresés.

  • SQL-hibakeresés.

  • Memóriaképfájl hibakeresése.

  • Kód szerkesztése egy nem kezelt kivétel bekövetkezése után, amikor a nem kezelt kivételeknél a hívásverem visszatekerése opció nincs kiválasztva.

  • Az alkalmazás hibakereséséhez használja a Csatolás parancsot az alkalmazás futtatása helyett a Hibakeresés menü Start elemére kattintva.

  • Optimalizált kód hibakeresése.

  • A kód egy régi verziójának hibakeresése, miután egy új verzió összeállítása sikertelen volt a buildelési hibák miatt.

  • Egyéni fordító (cl.exe) elérési útjának használata. Biztonsági okokból a Visual Studio mindig a telepített fordítót használja a fájlok szerkesztés és folytatás során történő újrafordításához. Ha egyéni fordítóútvonalat használ (például egy egyéni $(ExecutablePath) változón keresztül a *.props fájlban), figyelmeztetés jelenik meg, és a Visual Studio visszatér ugyanahhoz a verzióhoz/architektúrához tartozó telepített fordítóhoz.

  • Örökölt architektúrák/MSVC-eszközkészletek. Az MSVC v140-eszközkészlettel az alapértelmezett hibakereső támogatja az X86- és X64-alkalmazások szerkesztését és folytatását. Az örökölt eszközkészletek csak az X86-alkalmazásokat támogatják. Az MSVC v120-nál régebbi eszközkészleteknek az örökölt hibakeresőt kell használniuk a "Hibakeresési > beállítások > általános > Natív kompatibilitási mód használata" bejelölésével a Szerkesztés és folytatás funkció használatához.

Csatolási korlátozások

A szerkesztést és a folytatást letiltó linkerbeállítások

A következő hivatkozási beállítások letiltják a Szerkesztés és a Folytatás funkciót:

  • A /OPT:REF, /OPT:ICF vagy /INCREMENTAL:NO beállítása letiltja a Szerkesztés és Folytatás funkciót a következő figyelmeztetéssel:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • A /ORDER, /RELEASE vagy /FORCE beállítás letiltja a szerkesztést és a folytatást az alábbi figyelmeztetéssel:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

  • Ha olyan beállítást állít be, amely megakadályozza a programadatbázis (.pdb) fájljának létrehozását, az adott figyelmeztetés nélkül letiltja a szerkesztést és a folytatást.

Automatikus újrakapcsolás korlátozásai

Alapértelmezés szerint a Szerkesztés és folytatás újra összekapcsolja a programot egy hibakeresési munkamenet végén, hogy létrehozhasson egy naprakész végrehajthatót.

A Szerkesztés és Folytatás funkció nem tudja átlinkelni a programot, ha nem az eredeti build helyéről végez hibakeresést. Egy üzenet azt jelzi, hogy manuálisan kell újraépíteni.

A „szerkesztés és folytatás” nem építi újra a statikus könyvtárakat. Ha módosításokat hajt végre egy statikus könyvtárban a Szerkesztés és Folytatás funkcióval, manuálisan kell újraépítenie a könyvtárat, és újra kell kötni az alkalmazásokat, amelyek azt használják.

A Szerkesztés és a Folytatás nem indítja el az egyéni buildelési lépéseket. Ha a program egyéni buildelési lépéseket használ, érdemes lehet manuálisan újraépíteni, hogy a program az egyéni buildelési lépéseket lefuttassa. Ebben az esetben kikapcsolhatja az újracsatolást a Szerkesztés és a Folytatás után, annak érdekében, hogy felszólítást kapjon a kézi újraépítésre.

Az újrahivatkozás letiltása a Szerkesztés és a Folytatás után:

  1. A Hibakeresés menüben válassza a Beállítások és beállítások lehetőséget.

  2. A Beállítások párbeszédpanel hibakeresési csomópontja alatt válassza a Szerkesztés és a Folytatás csomópontot.

  3. Törölje a Relink kódmódosítások hibakeresés után jelölőnégyzet jelölését.

Előre összeállított fejléckorlátozások

Alapértelmezés szerint a szerkesztés és a folytatás előre lefordított fejléceket tölt be és dolgoz fel a háttérben, hogy felgyorsítsa a kódmódosítások feldolgozását. Az előre összeállított fejlécek betöltése fizikai memória lefoglalását igényli, ami problémát jelenthet, ha korlátozott RAM-mal rendelkező gépen dolgozik. Hibakeresés közben a Windows Feladatkezelő segítségével meghatározhatja, hogy mennyi a rendelkezésre álló fizikai memória, és ez problémát jelenthet-e. Ha ez az összeg nagyobb, mint az előre összeállított fejlécek mérete, a Szerkesztés és a Folytatás nem okoz problémát. Ha az összeg kisebb, mint az előre összeállított fejlécek mérete, megakadályozhatja, hogy a Szerkesztés és a Folytatás előre összeállított fejléceket töltsön be a háttérben.

Az előre összeállított fejlécek háttérbetöltésének letiltása a szerkesztéshez és a folytatáshoz:

  1. A Hibakeresés menüben válassza a Beállítások és beállítások lehetőséget.

  2. A Beállítások párbeszédpanel hibakeresési csomópontja alatt válassza a Szerkesztés és a Folytatás csomópontot.

  3. Törölje az Előfordítás engedélyezése jelölőnégyzetet.

IDL-attribútumok korlátozásai

A Szerkesztés és folytatás nem hozza létre újra az interfészdefiníciós nyelvi (IDL) fájlokat. Ezért az IDL-attribútumok módosításai nem jelennek meg a hibakeresés során. Az IDL-attribútumok módosításainak eredményének megtekintéséhez le kell állítania a hibakeresést és újra kell építenie az alkalmazást. A Szerkesztés és a Folytatás nem okoz hibát vagy figyelmeztetést, ha az IDL-attribútumok megváltoztak. További információ: IDL-attribútumok.

Problémák diagnosztizálása

Ha a forgatókönyv nem felel meg a fent említett feltételeknek, a következő DWORD beállításjegyzék-érték beállításával további adatokat gyűjthet:

  1. Nyisson meg egy fejlesztői parancssort.

  2. Futtassa a következő parancsot:

    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

A hibakeresési munkamenet elején ennek az értéknek a beállítása a Szerkesztés és Folytatás különböző összetevőit arra készteti, hogy részletes naplózást végezzenek a Kimeneti ablak>hibakeresés panelen.