Udostępnij za pośrednictwem


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 (na podstawie plików .vcxproj) można dostosować ustawienia we właściwościach projektu. W przypadku projektów innych niż MSBuild ustawienia można dostosować w pliku CppProperties.json 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 w pojedynczym pliku

Po otwarciu pliku, który nie jest uwzględniony w projekcie, program Visual Studio zapewnia pewne wsparcie dla funkcji IntelliSense, ale domyślnie nie są wyświetlane żadne podkreślenia błędów. Jeśli pasek nawigacyjny jest oznaczony jako Różne pliki, to prawdopodobnie wyjaśnia, dlaczego nie widzisz podkreśleń 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:

funkcja IntelliSense VC++ na liście błędów

Funkcja IntelliSense generuje maksymalnie 1000 błędów. Jeśli w plikach nagłówkowych uwzględnionych w pliku źródłowym występuje ponad 1000 błędów, plik źródłowy wyświetla tylko jedno podkreślenie błędu na samym 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, możliwe, że 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.

katalogi dołączane VC++

Aby wyświetlić bieżące wartości makr kompilacji, takich jak VC_IncludePath, wybierz wiersz Uwzględnij katalogi i kliknij listę rozwijaną po prawej stronie. Następnie wybierz pozycję <Edytuj> i kliknij przycisk makra.

Projekty Makefile

Dla projektów Makefile opartych na szablonie projektu NMake wybierz NMake w okienku po lewej stronie, a następnie wybierz pozycję Uwzględnij ścieżkę wyszukiwania w kategorii IntelliSense:

projekt makefile zawiera ścieżki

Projekty otwartych folderów

W przypadku projektów CMake upewnij się, że ścieżki #include są poprawnie określone dla wszystkich konfiguracji w CMakeLists.txt. Inne typy projektów mogą wymagać pliku CppProperties.json. Aby uzyskać więcej informacji, zobacz Konfiguruj IntelliSense za pomocą CppProperties.json. Upewnij się, że ścieżki są poprawne dla każdej konfiguracji zdefiniowanej w pliku.

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

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 bardzo szybki, 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. Jeśli na pasku nawigacyjnym jest wyświetlane najbardziej wewnętrzne makro, bieżąca definicja funkcji została pominięta:

    analizator tagów pomija definicję funkcji

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

    analizator tagów oferuje definiowanie istniejącej funkcji

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 listy błędów .

Weryfikowanie ustawień projektu przy użyciu rejestrowania diagnostycznego

Aby sprawdzić, czy kompilator IntelliSense używa poprawnych opcji kompilatora, w tym makr dołączania ścieżek i makr preprocesora, włącz rejestrowanie diagnostyczne wierszy poleceń funkcji IntelliSense w narzędziach Tools > Options > Text Editor > C/C++ > Advanced > Diagnostic Logging. Ustaw Włącz rejestrowanie na True, poziom rejestrowania na 5 (najbardziej szczegółowy) i filtr rejestrowania na 8 (rejestrowanie funkcji IntelliSense).

W oknie Dane wyjściowe będą teraz wyświetlane wiersze poleceń, które są przekazywane do kompilatora 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. Na przykład, jeśli katalog Include projektu zawiera $(MyVariable)\Include, a dziennik diagnostyczny pokazuje /I\Include jako ścieżkę Include, oznacza to, że $(MyVariable) nie została zinterpretowana i została usunięta z końcowej ścieżki Include.

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, Visual Studio może potrzebować nawet godziny na wykrycie zmian 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 jest niestandardowe pliki .props lub targets. W programie Visual Studio 2017 w wersji 15.6 lub nowszej błędy kompilacji dotyczące wyłącznie IntelliSense są rejestrowane w oknie Wyjście. Aby je wyświetlić, ustaw Wyświetl dane z na Rozwiązanie:

okno danych wyjściowych dla błędów rozwiązania

Komunikat o błędzie może spowodować 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 wartość true i uruchomisz ponownie program Visual Studio, w katalogu %TEMP% zostanie wyświetlony plik dziennika, który może pomóc zdiagnozować błąd kompilacji.

Aby dowiedzieć się więcej o zmiennej środowiskowej TRACEDESIGNTIME, zobacz Roslyn i Common Project System. Informacje w tych artykułach są istotne dla projektów języka C++.