Jak sprawić, by IntelliSense niezawodnie działał w Visual Studio 2008

Czy ktoś wie jak sprawić, by IntelliSense działał niezawodnie podczas pracy w projektach C / C++? Wydaje się działać dla około 1 na 10 plików. Visual Studio 2005 wydaje się być dużo lepsze niż 2008.

Edit: choć niekoniecznie rozwiązanie, obejście przedstawione tutaj:

Jak sprawić, by IntelliSense niezawodnie działało w Visual Studio 2008

Jest chyba najlepszym rozwiązaniem, jeśli chcę przyzwoity system IntelliSense.

Author: Community, 2008-09-02

12 answers

Zdałem sobie również sprawę, że Intellisense jest czasem 'zagubiony' , w jakimś dużym projekcie. Dlaczego? Nie mam pojęcia.

Dlatego kupiliśmy Visual Assist (od Tomato software ) i wyłączyliśmy Intellisense usuwając dll feacp.dll w podkatalogu Visual studio (C:\Program Files\Microsoft Visual Studio 8 \ VC\vcpackages)

To nie jest rozwiązanie, tylko obejście.

 27
Author: Steve Gury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 15:07:53

Natywny C++ intellisense nie działa niezawodnie w żadnej wersji Visual Studio. Uważam, że są dwa wspólne problemy:

1) ścieżki plików nagłówkowych nie są ustawione poprawnie. Gdy znajdziesz typ, w którym intellisense nie działa, użyj IDE, aby kliknąć każdy plik nagłówka, aby znaleźć ten, który zawiera typ. (Kliknij prawym przyciskiem myszy na #dołącz i wybierz Otwórz dokument...). Jeśli to się nie powiedzie, zanim przejdziesz do pliku deklarującego Typ, to jest to twój problem. Upewnij się, że wyszukiwanie plików nagłówkowych ścieżki są ustawione poprawnie.

I,

2) baza danych intellisense jest uszkodzona. To się zdarza cały czas. Musisz zamknąć rozwiązanie, usunąć .plik ncb, a następnie ponownie otworzyć rozwiązanie. W odpowiedzi na inne pytanie tutaj umieściłem makro, którego do tego używam.


Preprocesor może również mylić intellisense - więc upewnij się, że dowolne # defines podczas budowania są również dostępne dla intellisense. Poza tym, Nie wiem, co jeszcze może to złamać. Nie widziałem wszelkie szczególne kwestie związane z deklaracjami forward.

 31
Author: John Richardson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:21

Wygląda na to, że na horyzoncie jest nadzieja dla tych z nas, którzy nie mogą uzyskać pomocy wizualnej:

Odbudowa Intellisense

 6
Author: Nick McCowin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-29 18:50:09

Czy masz zainstalowane (lub odinstalowane) dodatki? To wpływa na mój intellisense.

Poza tym upewnij się, że Narzędzia- > Opcje - > edytor tekstu- > wszystkie języki "Auto Lista członków" i "informacje o parametrach" są zaznaczone.

 4
Author: Sara Chipps,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-19 20:13:46

Nie używam VS2008 dla C++, tylko VB & C#, ale stwierdzam, że kiedy intellisense przestaje działać (prawda dla VS2003/2005/2008), to dlatego, że coś w projekcie/pliku jest zepsute - zwykle złe odniesienie lub kod.

VB i C# mają znacznie lepszą obsługę intellisense ze względu na możliwość refleksji nad odwołanymi złożeniami w celu zbudowania drzewa intellisense.

C++ musi przechodzić przez pliki nagłówkowe dla prototypów funkcji, a jeśli ścieżki nie są poprawne, nie znajdzie wszystkie nagłówki prototypów.

 2
Author: FlySwat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 13:36:33

Moja poprawka do itellisense była wymagana po tym, jak to straszne narzędzie refactor zmiksowało mój kod. Problemem był plik nagłówkowy klasy, który zawierał #include. Odwołanie rekurencyjne niszczy itellisense. Objawem tego jest to, że itellisense może zobaczyć inne klasy, ale nie obecną. Także:

Użyj # pragma raz, aby wyeliminować duplikaty nagłówków

Jeśli projekt zajmuje teraz dużo więcej czasu, aby załadować, że jest to próba sensu konfliktu, który jest powodując wówczas brak wsparcia ukończenia.

Często dotyczy to tylko jednego obiektu klasy, który pokazuje, jakie pliki (zazwyczaj nagłówki) należy przeglądać.

 2
Author: TW Burger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-15 21:48:08

@John Richardson / @Jonathan Holland

Moje includes są poprawnie skonfigurowane, nie ma żadnych problemów. Próbowałem też kilka razy odbudować KBC, ale nigdy nie naprawia go w 100%.

Mam wrażenie, że może to mieć związek z deklaracjami klas. na przykład, aby zmniejszyć złożoność includes w plikach nagłówkowych, zwykle robimy coś w stylu:
class MyPredeclared;

class SomeOtherClass
{
private:
    MyPredeclared* m_pPointer;
}
Ciekawe czy to wszystko spieprzy? Jakieś inne pomysły? Zdecydowanie pogarsza się, im większy jest Twój projekt.
 1
Author: Mark Ingram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:57

Miałem bardzo irytujący problem, intellisense działał tylko w niektórych plikach, bez wyraźnego powodu... Zajęło mi to kilka godzin przekopywania się przez google, ale w końcu zrozumiałem, że powodem było rzeczywiście rekurencyjne odniesienie! Używałem:

#ifndef CLASS_H
#define CLASS_H
...
#endif

Aby uniknąć redefinicji symboli, a to czasami łamie intellisense w dużych projektach.

Ale wystarczy skomentować ifndef-define-endif i umieścić:

#pragma once 

Na początku plików nagłówkowych aby nadal unikać redefinicji i mieć Intellisense działa ponownie=)=)

Przynajmniej mi to pomogło, mam nadzieję, że się przyda... Pozdrawiam Francesco
 1
Author: Francesco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-02 10:19:26

Ostatnio studiowałem Intellisense w VS2008, ponieważ rozwijam dość dużą bibliotekę numerycznej algebry liniowej C++, w której szeroko stosowane są szablony i takie. Intellisense przestał wkrótce pracować nad projektem, a ja się poddałem, ale teraz stało się to naprawdę irytujące bez niego, więc postanowiłem zbadać. Tego się dowiedziałem:

Zakładając, że istnieje plik(y), zawierający kod, który "łamie" Intellisense,

  • jeśli pliki nagłówkowe, które łamią Intellisense są w projekt, ale nie #include d, nadal działa w pozostałych plikach
  • jeśli są włączone, ale żaden typ zadeklarowany wewnątrz nie jest używany, nadal działa
  • jeśli są one włączone, A Typ zadeklarowany wewnątrz jest użyty, może nadal działać (brak Intellisense dla członków, brak Intellisense po wystąpieniu danego typu, ale przynajmniej globalne nazwy i informacje o argumentach przed)
  • jeśli Intellisense jest złamane w jednym .plik cpp, może nadal działać w innych, gdzie problematyczny kod nie jest wliczony w cenę ani używany (ale wyobrażam sobie, że jeśli zawiesi się źle, zostanie wyłączony dla całego projektu, chociaż mnie to nie spotkało)
  • Intellisense wydaje się być aktualizowane po udanej kompilacji (czasami nie wcześniej)
  • umieszczanie zepsutego kodu w dowolnym z #if 0, /* .. */ nie jest to jednak żaden problem.]}

Z funkcji C++, których użyłem, właściwie tylko kilka przerwało Intellisense:

  • porównanie z " > " lub "> = " w parametrze szablonu (np. static_assert<(size > 0)>)
    • nie rozwiązano za pomocą podwójnych nawiasów (static_assert<((size > 0))> nie pomaga)
    • rozwiązane przez użycie zamiast " static_assert<0 < size> działa)
    • rozwiązano, przechowując wartość w enum i używając jej do specjalizowania szablonu
  • Jawna specjalizacja szablonu funkcji wyłącza argument info (np. function<type>(args))
    • prawdopodobnie nie można rozwiązać (może zawijać w makro), ale mogę żyć z tym, że jest zepsuty
  • instancja szablonu typ członka, np. Matrix::MakeMatrixType<3, 3>::Result r;
      W 1999 roku, w wyniku połączenia dwóch różnych związków chemicznych, w 1999 roku, w 1999 roku, w 1999 roku, w 1999 roku, w 1999 roku, w 1999 roku]}
    • obejście poprzez przeniesienie takiego kodu do osobnego .cpp gdzie nie działa (nie zawsze jest to możliwe)

Wydaje się, że niektóre z tych problemów są spowodowane pewnym "uproszczonym" parsowaniem, które jest mniej silne niż odpowiedni parser C++. Z powyższą informacją pod ręką, "niezawodna" metoda działania Intellisense w istniejącym kod:

  1. Skonfiguruj pusty projekt (aplikację konsolową), Utwórz Main.cpp z atrapą void main() {} w środku.
  2. Dołącz jeden z uszkodzonych plików nagłówkowych i math.h
  3. W przeciwieństwie do innych systemów, Intellisense nie może być instalowane na komputerach PC.]}
  4. sprawdź, czy Intellisense działa, wpisując np. {[11] } i sprawdzając, czy pojawi się argument help. Czasami to by zadziałało, ale pomoc członków by nie zadziałała - więc spróbuj tego również.
  5. Stwórz instancję czegoś w nagłówku / align = "left" /
  6. Usuń kod z pliku winowajcy i przejdź do kroku 3
  7. Po znalezieniu i naprawieniu problematycznego kodu, Umieść z powrotem kod usunięty w kroku 5, spróbuj ponownie
  8. po tym, jak cała klasa działa dobrze, stwórz instancję następnej klasy itd ...

W ten sposób łatwo było wskazać lokalizacje kodu, który sprawiał problemy (zdaję sobie sprawę, że może to być niewykonalne dla naprawdę dużych projektów, w moim przypadku tylko jeden plik z 97 wykonanych problemów). Zauważ, że 'Build' tutaj odnosi się do kompilacji, etap łączenia nie musi się kończyć, więc nierozwiązane zewnętrzne są ok, IS powinno się zaktualizować niezależnie.

Inną metodą aktualizacji jest (inna niż budowanie) zapisywanie wszystkiego, zamykanie obszaru roboczego, usuwanie ./ align = "left" / Następnie poczekaj na ' aktualizowanie Intellisense ... (N)' zniknąć z paska stanu (N liczy się do zera, jeśli nie idzie do końca, to pokazuje postęp, gdzie problemy wystąpił). To było dość nudne.

 1
Author: the swine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-06 08:53:07

O tym problemie zauważyłem coś ciekawego (na Visual Studio 2010): aby rozwiązać ten problem, zmieniłem #include sintax w moich plikach nagłówkowych, wcześniej był (stary projekt wykonany z VS 2005 i ponownie otwarty za pomocą VS 2010):

#include <myfile.h> 

I naprawiam to za pomocą:

#include "myfile.h"

Po intellisense zacząć działać poprawnie! Mam nadzieję, że to pomoże!

 0
Author: Roberto Conte Rosito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-28 07:45:30

Musiałem zresetować ustawienia...

C:\Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE > devenv.exe / ResetSettings

Thread on this here

 0
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:52

Problem jest z .pliki vcproj.

Znajdziesz jeśli przełączysz się na tryb release z trybu debugowania, zbuduj, a następnie spróbuj intellisense to często działa.

Zamknij Visual Studio. Jeśli szukasz .pliki vcproj w Twoim projekcie, edytuj je i Szukaj dwóch pierwszych instancji AdditionalIncludeDirectories. Wartość tego powinna wyglądać jak"..\,....\ "zamiast"../..".

Otwórz ponownie swój projekt, pozwól Intellisense zakończyć budowę, wtedy powinien być naprawione.

 0
Author: Aaron Middleton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-12 11:33:35