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


C++ projekt konfigurálása az IntelliSense-hez

Bizonyos esetekben előfordulhat, hogy manuálisan kell konfigurálnia a C++ projektet az IntelliSense megfelelő működéséhez. MSBuild-projektek esetén (fájlok alapján .vcxproj ) módosíthatja a projekttulajdonságok beállításait. Nem MSBuild-projektek esetén állítsa be a beállításokat a projekt gyökérkönyvtárában lévő CppProperties.json fájlban. Bizonyos esetekben előfordulhat, hogy létre kell hoznia egy tippfájlt, amely segít az IntelliSense-nek megérteni a makródefiníciókat. A Visual Studio IDE segít azonosítani és kijavítani az IntelliSense-problémákat.

Egyfájlos IntelliSense

Ha olyan fájlt nyit meg, amely nem szerepel a projektben, a Visual Studio némi IntelliSense-támogatást biztosít, de alapértelmezés szerint nem jelennek meg hibajelek. Ha a navigációs sáveltérő fájlokat tartalmaz, akkor valószínűleg ez megmagyarázza, hogy miért nem jelenik meg hibás kód alatti hibajel, vagy miért nincs definiálva egy előfeldolgozó makró.

A hibalista ellenőrzése

Ha egy fájl nincs megnyitva egyfájlos módban, és az IntelliSense nem működik megfelelően, először a Hibalista ablakot érdemes ellenőrizni. Ha meg szeretné tekinteni az aktuális forrásfájl összes IntelliSense-hibáját az összes mellékelt fejlécfájllal együtt, válassza Build + IntelliSense a legördülő menüben:

Képernyőkép a Hibalista ablakról. A szűrő legördülő listájában a Build + IntelliSense van kiválasztva.

Az IntelliSense legfeljebb 1000 hibát eredményez. Ha egy forrásfájl fejlécfájljaiban több mint 1000 hiba található, akkor a forrásfájl csak egyetlen hibát jelenít meg a forrásfájl elején.

Győződjön meg arról, hogy #include elérési utak helyesek

MSBuild-projektek

Ha a Visual Studio IDE-n kívül futtatja a buildeket, és a buildek sikeresek, de az IntelliSense helytelen, előfordulhat, hogy a parancssor nem szinkronizálódik egy vagy több konfiguráció projektbeállításaival. Kattintson a jobb gombbal a projektcsomópontra Megoldáskezelő, és győződjön meg arról, hogy minden #include elérési út helyes az aktuális konfigurációhoz és platformhoz. Ha az elérési utak minden konfigurációban és platformban azonosak, kiválaszthatja Minden konfiguráció és Minden platform, majd ellenőrizheti, hogy az elérési utak helyesek-e.

Képernyőkép a Címtárak belefoglalása beállításról a Konfiguráció tulajdonságai szakaszban.

Az olyan buildmakrók aktuális értékeinek megtekintéséhez, mint például a VC_IncludePath, válassza a Címtárak belefoglalása legördülő menüt. Ezután kattintson a Szerkesztés< gombra>, és válassza a Makrók gombot.

Makefile-projektek

Az NMake-projektsablonon alapuló Makefile-projektek esetében válassza az NMake lehetőséget a Konfiguráció tulajdonságai területen, majd válassza a Keresési útvonal belefoglalása lehetőséget az IntelliSense kategóriában:

Képernyőkép az N konfigurációs tulajdonságok > – > Keresési útvonal belefoglalása beállításról.

CMake-projektek

CMake-projektek esetén győződjön meg arról, hogy #include elérési utak helyesen vannak megadva az összes konfigurációhoz a következőben CMakeLists.txt: . Más projekttípusokhoz fájlra lehet szükség CppProperties.json . További információért tekintse meg a következőt: Kódnavigáció konfigurálása CppProperties.json. Győződjön meg arról, hogy az elérési utak helyesek a fájlban definiált konfigurációkhoz.

Ha szintaxishiba van a CppProperties.json fájlban, az IntelliSense helytelen az érintett fájlokban. A Visual Studio megjeleníti a hibát a Kimeneti ablakban.

Címkeelemzővel kapcsolatos problémák

A címkeelemző egy fuzzy C++ elemző, amelyet böngészésre és navigációra használnak. Gyors, de nem próbálja teljesen megérteni az összes kódszerkezetet.

Például nem értékeli ki az előfeldolgozó makrókat, ezért helytelenül elemezheti azokat a kódot, amelyek nagy mértékben használják őket. Ha a Tag Parser ismeretlen kódszerkezettel találkozik, előfordulhat, hogy kihagyja a kód teljes régióját.

A probléma kétféleképpen nyilvánul meg a Visual Studióban:

  1. Az IDE felajánlja, hogy létrehoz egy függvénydefiníciót egy már definiált függvényhez.

  2. Ha a navigációs sáv egy legbelső makrót jelenít meg, akkor a program kihagyta az aktuális függvénydefiníciót:

    Képernyőkép a függvénydefiníciót kihagyó címkeelemzőről.

    A kódrészlet egy makródefiníciót jelenít meg az do_if számára, amelyet a függvény fő eleme használ. A címkeelemző nem érti a makrót, ezért ahelyett, hogy a navigációs legördülő lista azt mutatja, hogy az aktuális függvény neve a fő, a makró neve jelenik meg: do_if.

Az ilyen típusú problémák megoldásához adjon hozzá egy cpp.hint nevű fájlt a megoldáskönyvtár gyökeréhez. További információ: Tippfájlok.

A címkeelemző hibák a hibalista ablakban jelennek meg.

Projektbeállítások érvényesítése diagnosztikai naplózással

Annak ellenőrzéséhez, hogy az IntelliSense fordító a megfelelő fordítóbeállításokat használja-e, beleértve az elérési utakat és az előfeldolgozó makrókat, kapcsolja be az IntelliSense parancssorainak diagnosztikai naplózását.

  1. Nyissa meg az Eszközök>beállításai panelt, és bontsa ki az Összes beállításnyelv>>C/C++>IntelliSense>diagnosztikai naplózási szakaszát.

  2. Jelölje be a naplódiagnosztikai adatokat a kimeneti ablakban jelölőnégyzetet.

  3. Állítsa a naplózási szint értékét 5-re (a legtöbb részletességgel).

  4. Állítsa a naplózási szűrő értékét 8-ra (IntelliSense naplózás).

  1. Nyissa meg az Eszközök>beállításai párbeszédpanelt, és bontsa ki a Szövegszerkesztő>C/C++>Speciális szakaszát .

  2. A Diagnosztikai naplózás csoportban állítsa a Naplózás engedélyezése beállítást True (Igaz) értékre.

  3. Állítsa a naplózási szint értékét 5 -re (a legtöbb részletességgel).

  4. Állítsa a naplózási szűrő értékét 8-ra (IntelliSense naplózás).

  5. Kattintson az OK gombra.

A Kimeneti ablakban megjelennek az IntelliSense fordítónak átadott parancssorok. Íme egy mintakimenet:

[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h

Ezek az információk segíthetnek megérteni, hogy az IntelliSense miért ad pontatlan információkat. Ha például a projekt Belefoglalás könyvtára tartalmaz $(MyVariable)\Include, és a diagnosztikai napló belefoglalási útvonalként jelenik meg /I\Include , az azt jelenti, hogy $(MyVariable) a rendszer nem értékelte ki, és eltávolította a végleges belefoglalási útvonalról.

Tudnivalók az IntelliSense buildről

A Visual Studio egy dedikált C++ fordítóval hozza létre és tartja karban az intelliSense összes funkcióját használó adatbázist. Annak érdekében, hogy az IntelliSense-adatbázis szinkronban maradjon a kóddal, a Visual Studio automatikusan elindítja az IntelliSense csak buildeket háttérfeladatként a projektbeállításokban vagy a forrásfájlokban végrehajtott bizonyos módosításokra válaszul.

Bizonyos esetekben azonban előfordulhat, hogy a Visual Studio nem frissíti időben az IntelliSense adatbázist. Ha például futtat egy git pull vagy egy git checkout parancsot, a Visual Studio akár egy órát is igénybe vehet, hogy érzékelje a fájlok változásait. A megoldás összes fájljának újraellenőrzéséhez kattintson a jobb gombbal a projektcsomóponton a Megoldáskezelőben, majd válassza az Újraellenőrzés megoldásparancsot.

Az IntelliSense buildelési hibáinak elhárítása

Az IntelliSense-buildek nem hoznak létre bináris fájlokat, de továbbra is sikertelenek lehetnek. A hiba egyik lehetséges oka az egyéni .props vagy .targets fájlok. A Visual Studio 2017 15.6-os és újabb verzióiban a rendszer csak intelliSense buildelési hibákat naplóz a Kimeneti ablakban. Az alábbiak megjelenítéséhez állítsa be a beállítást a kimenetének megjelenítésére a Megoldásszerint.

Képernyőkép a Kimenet ablakról. A Kimenet megjelenítése legördülő listából a Megoldás értékre van állítva.

A hibaüzenet arra utasíthatja, hogy engedélyezze a tervezési idő nyomon követését:

error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.

Ha igaz értékre állítja a környezeti változót TRACEDESIGNTIME , és újraindítja a Visual Studiót, megjelenik egy naplófájl a %TEMP% könyvtárban, amely segíthet diagnosztizálni a buildelési hibát.

A környezeti változókkal kapcsolatos további információkért TRACEDESIGNTIME lásd a Roslyn és a Design-time buildeket. Az ezekben a cikkekben szereplő információk c++ projektek esetén relevánsak.