Naprawianie IntelliSense

2009-12-13 20:11

Wbudowany w Visual Studio system autouzupełniania kodu w przypadku C++ często działa całkiem dobrze, ale wiele osób pewnie stwierdziłoby, że częściej nie działa w ogóle. Każdy na pewno spotkał się z sytuacją, że po wpisaniu operatora kropki czy strzałki (->) jego oczom nie ukazywała się wcale lista składników klasy, a jedynie mało pomocny komunikat na pasku stanu. Sugeruje on zapoznanie się z określonym artykułem w MSDN, traktującym o rozwiązywaniu problemów z IntelliSense.

Przyznajmy teraz: czy ktoś rzeczony rzeczywiście artykuł przeczytał? :) Mam co do tego spore wątpliwości, lecz od razu zapewniam: nic straconego. Nie ma tam bowiem nic specjalnie użytecznego ;> Nie istnieje niestety żaden specjalny trik, który sprawiłby, aby mechanizm autouzupełniania w VS dla kodu C++ działał co najmniej w połowie tak dobrze jak chociażby dla C#. Jeśli więc chcemy, by był on dla nas choć trochę użyteczny, musimy sami mu pomóc. Jak?

  • Poprawmy błędy kompilacji. Dotyczy to zwłaszcza błędów w nagłówkach (jako że są one dołączane wielokrotnie w różnych plikach .cpp) oraz błędów powodujących trudności w określeniu, gdzie kończą się poszczególne fragmenty kodu (czyli wszelkiego rodzaju nieprawidłowych nawiasowań). Drobne pomyłki w rodzaju literówek w identyfikatorach wpływają zwykle tylko na tę linijkę kodu, w której występują, a po korekcie IS potrafi bardzo szybko wrócić do działania.
  • Uważajmy na preprocesor i nagłówki. MSDN jawnie specyfikuje jedną sytuację, w której IntelliSense nie musi działać. Dotyczy to wielokrotnego dołączania tego samego pliku nagłówkowego w taki sposób, że makra (#define‘y) wpływają na sposób, w jaki jest on przetwarzany. Przykładem może być dołączenie windows.h raz normalnie, a drugi raz z uprzednio zdefiniowanym makrem WIN32_LEAN_AND_MEAN.
  • Jeśli wszystko zawodzi, wygenerujmy od początku plik .ncb. W tym pliku (często największym w całym projekcie) IntelliSense przechowuje informacje o strukturze kodu. Jeśli często “rozgrzebujemy” nasz projekt, czynimy w nim duże zmiany i dokonujemy refaktoringu, to plik ten może zawierać nieaktualne, nadmiarowe lub nieprawidłowe informacje albo po prostu być uszkodzony. W takim wypadku należy go po prostu usunąć, a następnie przeprowadzić ponowne kompilację całego solution.

Nie ma oczywiście gwarancji, że powyższe kroki sprawią, że IntelliSense poradzi sobie z podpowiadaniem w każdej sytuacji. Kod C++, zwłaszcza skomplikowany i korzystający z wielu “sztuczek językowych” (jak np. bibliotek Boost) nie jest łatwy do programowej analizy. Pozostaje więc mieć nadzieję, że w przyszłych wersjach VS z autouzupełnianiem będzie już lepiej; podobno w wersji 2010 jest z tym już całkiem nieźle :)

Tags:
Author: Xion, posted under Applications, Programming »


5 comments for post “Naprawianie IntelliSense”.
  1. Netrix:
    December 16th, 2009 o 1:26

    Hmm, w takim razie trzeba będzie przetestować 2010, a jeśli nie to zawsze pozostaje Visual Assists X.

  2. crayze:
    December 16th, 2009 o 14:48

    dla mnie największym minusem intelisense w vs2008 było brak zsynchronizowania z mechanizmem precompiled headers’ów, a używam go praktycznie zawsze…

    Otóż jak wiadomo z użyciem precompileada, w każdym pliku cpp na początku musi być #include “stdafx.h” (lub inna nazwa), bez względu na to gdzie plik stdafx.h względem danego pliku cpp leży, czyli jeśli w projekcie wszystkie pliki cpp NIE będą fizycznie w tym samym folderze, intelisense leży i kwiczy (oczywiście używając precompiled)…

    w vs2010 jest już dobrze, aczkolwiek o ile jest dużo lepiej, nadal są lekkie niedociągnięcia, w postaci dziwnych afektów :>

  3. pozy:
    March 18th, 2010 o 2:16

    Jedną z poważniejszych wad C++ jest to, że bardzo trudno (czyt. wolno) się go parsuje, bo ma dziwaczną gramatykę. Przez to bardzo ciężko zrobić porządne podpowiadanie kodu takie jak w C# albo w Javie. Jest w ogóle jakiekolwiek środowisko, w którym działa to szybko i zawsze poprawnie?

  4. a:
    May 1st, 2010 o 23:52

    @pozy
    kdevelop4 radzi sobie wspaniale nawet z boostem, niestety podpowiadanie kodu to chyba jedyne co tam działa :(

  5. szx:
    June 7th, 2010 o 15:45

    Dzięki, usunięcie pliku .ncb pomogło :)

Comments are disabled.
 


© 2017 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.