Udostępnij za pomocą


Konfigurowanie projektu C++ dla funkcji IntelliSense

W niektórych przypadkach może być konieczne ręczne skonfigurowanie projektu C++, aby funkcja IntelliSense działała prawidłowo. W przypadku projektów MSBuild (opartych na .vcxproj plikach) można dostosować ustawienia we właściwościach projektu. W przypadku projektów innych niż MSBuild można dostosować ustawienia w CppProperties.json pliku w katalogu głównym projektu. W niektórych przypadkach może być konieczne utworzenie pliku wskazówek, aby ułatwić funkcji IntelliSense zrozumienie definicji makr. Środowisko IDE programu Visual Studio ułatwia identyfikowanie i rozwiązywanie problemów z funkcją IntelliSense.

IntelliSense dla pojedynczego pliku

Po otwarciu pliku, który nie jest uwzględniony w projekcie, program Visual Studio zapewnia obsługę funkcji IntelliSense, ale domyślnie nie są wyświetlane żadne zygzaki błędów. Jeśli na pasku nawigacyjnym widnieje napis Różne pliki, to prawdopodobnie wyjaśnia, dlaczego nie widzisz zygzaków błędów w nieprawidłowym kodzie lub dlaczego makro preprocesora nie jest zdefiniowane.

Sprawdzanie listy błędów

Jeśli plik nie jest otwarty w trybie pojedynczego pliku, a funkcja IntelliSense nie działa poprawnie, pierwszym miejscem do sprawdzenia jest okno Lista błędów . Aby wyświetlić wszystkie błędy funkcji IntelliSense dla bieżącego pliku źródłowego wraz ze wszystkimi dołączonymi plikami nagłówka, wybierz pozycję Build + IntelliSense na liście rozwijanej:

Zrzut ekranu przedstawiający okno Lista błędów. Na liście rozwijanej filtru wybrano pozycję Build + IntelliSense.

Funkcja IntelliSense generuje maksymalnie 1000 błędów. Jeśli w plikach nagłówkowych uwzględnionych w pliku źródłowym występuje więcej niż 1000 błędów, plik źródłowy pokazuje tylko jedną falistą linię błędu na początku pliku źródłowego.

Upewnij się, że ścieżki #include są poprawne

Projekty MSBuild

Jeśli uruchamiasz kompilacje poza środowiskiem IDE programu Visual Studio, a kompilacje kończą się powodzeniem, ale funkcja IntelliSense jest niepoprawna, wiersz polecenia nie jest zsynchronizowany z ustawieniami projektu dla co najmniej jednej konfiguracji. Kliknij prawym przyciskiem myszy węzeł projektu w eksploratorze rozwiązań i upewnij się, że wszystkie ścieżki #include są poprawne dla bieżącej konfiguracji i platformy. Jeśli ścieżki są identyczne we wszystkich konfiguracjach i platformach, możesz wybrać Wszystkie konfiguracje i Wszystkie platformy, a następnie sprawdzić, czy ścieżki są poprawne.

Zrzut ekranu przedstawiający ustawienie Uwzględnij katalogi w sekcji Właściwości konfiguracji.

Aby wyświetlić bieżące wartości makr kompilacji, takich jak VC_IncludePath, wybierz listę rozwijaną Dołącz katalogi . Następnie wybierz pozycję <Edytuj> i wybierz przycisk Makra .

Projekty Makefile

W przypadku projektów makefile opartych na szablonie projektu NMake wybierz pozycję NMake w obszarze Właściwości konfiguracji, a następnie wybierz pozycję Uwzględnij ścieżkę wyszukiwania w kategorii IntelliSense :

Zrzut ekranu przedstawiający ustawienie Właściwości > konfiguracji N Dołącz > ścieżkę wyszukiwania.

Projekty platformy CMake

W przypadku projektów CMake upewnij się, że ścieżki #include są poprawnie określone dla wszystkich konfiguracji w programie CMakeLists.txt. Inne typy projektów mogą wymagać CppProperties.json pliku. Aby uzyskać więcej informacji, zobacz Konfigurowanie nawigacji po kodzie przy użyciu CppProperties.json. Upewnij się, że ścieżki są poprawne dla każdej konfiguracji zdefiniowanej w pliku.

Jeśli w CppProperties.json pliku wystąpi błąd składni, funkcja IntelliSense w plikach, których dotyczy problem, jest niepoprawna. Program Visual Studio wyświetla błąd w oknie wyjściowym.

Problemy z analizatorem tagów

Analizator tagów to rozmyty analizator języka C++, który jest używany do przeglądania i nawigacji. Jest to szybkie, ale nie próbuje całkowicie zrozumieć każdej konstrukcji kodu.

Na przykład nie ocenia makr preprocesora i dlatego może niepoprawnie analizować kod, który sprawia, że są one intensywnie używane. Gdy analizator tagów napotka nieznaną konstrukcję kodu, może pominąć cały region kodu.

Istnieją dwa typowe sposoby manifestów tego problemu w programie Visual Studio:

  1. Środowisko IDE oferuje utworzenie definicji funkcji dla funkcji, która jest już zdefiniowana.

  2. Jeśli na pasku nawigacyjnym jest wyświetlane najbardziej wewnętrzne makro, bieżąca definicja funkcji została pominięta:

    Zrzut ekranu przedstawiający analizator tagów pomijający definicję funkcji.

    Fragment kodu przedstawia definicję makr dla do_if, która jest używana wewnątrz głównej funkcji. Analizator tagów nie rozumie makra, więc zamiast listy rozwijanej nawigacji pokazującej, że nazwa bieżącej funkcji jest główna, pokazuje nazwę makra: do_if.

Aby rozwiązać tego rodzaju problemy, dodaj plik o nazwie cpp.hint do katalogu głównego rozwiązania. Aby uzyskać więcej informacji, zobacz Hint Files.

Błędy analizatora tagów są wyświetlane w oknie Lista błędów .

Weryfikowanie ustawień projektu przy użyciu rejestrowania diagnostycznego

Aby sprawdzić, czy kompilator IntelliSense używa poprawnych opcji kompilatora, w tym ścieżki Include i makra preprocesora, włącz rejestrowanie diagnostyczne wierszy poleceń IntelliSense.

  1. Otwórz okienko Narzędzia>Opcje i rozwiń sekcję Wszystkie ustawienia>Języki>C/C++>IntelliSense>Rejestrowanie diagnostyczne.

  2. Zaznacz pole wyboru Rejestrowanie informacji diagnostycznych do okna danych wyjściowych.

  3. Ustaw wartość poziomu logowania na 5 (najbardziej szczegółowy).

  4. Ustaw wartość filtru rejestrowania na 8 (rejestrowanie IntelliSense).

  1. Otwórz okno dialogowe> i rozwiń sekcję Edytor> tekstówC/C++>Advanced.

  2. W grupie Rejestrowanie diagnostyczne ustaw opcję Włącz rejestrowanie na true.

  3. Ustaw wartość poziomu rejestrowania na 5 (najbardziej szczegółowy).

  4. Ustaw wartość Filtr rejestrowania na wartość 8 (rejestrowanie funkcji IntelliSense).

  5. Kliknij przycisk OK.

W oknie Danych wyjściowych są teraz wyświetlane wiersze polecenia, które są przekazywane do kompilatora funkcji IntelliSense. Oto przykładowe dane wyjściowe:

[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

Te informacje mogą ułatwić zrozumienie, dlaczego funkcja IntelliSense dostarcza niedokładne informacje. Jeśli na przykład katalog Include projektu zawiera $(MyVariable)\Include, a dziennik diagnostyczny pokazuje /I\Include jako ścieżkę dołączania, oznacza to, że $(MyVariable) nie został uwzględniony i dlatego został usunięty z końcowej ścieżki dołączania.

Informacje o kompilacji funkcji IntelliSense

Program Visual Studio używa dedykowanego kompilatora języka C++, aby utworzyć i obsługiwać bazę danych, która obsługuje wszystkie funkcje funkcji IntelliSense. Aby zachować synchronizację bazy danych IntelliSense z kodem, program Visual Studio automatycznie uruchamia kompilacje tylko intelliSense jako zadania w tle w odpowiedzi na pewne zmiany wprowadzone w ustawieniach projektu lub plikach źródłowych.

Jednak w niektórych przypadkach program Visual Studio może nie zaktualizować bazy danych IntelliSense w odpowiednim czasie. Na przykład, gdy uruchomisz polecenie git pull lub git checkout, może minąć nawet godzina, zanim program Visual Studio wykryje zmiany w plikach. Możesz wymusić ponowne skanowanie wszystkich plików w rozwiązaniu, klikając prawym przyciskiem myszy węzeł projektu w eksploratorze rozwiązań i wybierając pozycję Ponownie skanuj rozwiązanie.

Rozwiązywanie problemów z błędami kompilacji funkcji IntelliSense

Kompilacja intelliSense nie generuje plików binarnych, ale nadal może zakończyć się niepowodzeniem. Jedną z możliwych przyczyn niepowodzenia są pliki niestandardowe .props lub .targets. W Visual Studio 2017 w wersji 15.6 i nowszych, błędy kompilacji dotyczące wyłącznie IntelliSense są rejestrowane w oknie Wyjście. Aby je wyświetlić, ustaw opcję Pokaż dane wyjściowe z na Rozwiązanie:

Zrzut ekranu przedstawiający okno wyjściowe. Na liście rozwijanej Pokaż dane wyjściowe ustawiono wartość Rozwiązanie.

Komunikat o błędzie może zalecić włączenie śledzenia czasu projektowania.

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.

Jeśli ustawisz zmienną środowiskową TRACEDESIGNTIME na true i uruchom ponownie program Visual Studio, w katalogu zostanie wyświetlony plik %TEMP% dziennika, który może pomóc zdiagnozować błąd kompilacji.

Aby dowiedzieć się więcej na temat TRACEDESIGNTIME zmiennej środowiskowej, zobacz Kompilacje Roslyn i Design-time. Informacje w tych artykułach są istotne dla projektów języka C++.