2010-09-27 13 views
18

Używam CEDET (najnowszy CVS) z kilkoma umiarkowanie dużymi projektami (kilkaset kLOC-ów, głównie C, ale niektóre C++) i czasami doświadczam długich pauz, w których system zupełnie nie odpowiada na sekundy. Rzadziej, to wymyka się całkowicie spod kontroli i muszę zaciąć się na C-g i spróbować przesunąć kursor lub przełączyć się na inny bufor, aby odzyskać kontrolę.Wskazówki dotyczące skalowania CEDETA

Używam GNU Global do tworzenia tagów dla projektów, z którymi pracuję, ale to wciąż jest powolne, szczególnie dla semantic-symref-symbol, a niektóre skoki, które wydają się wymagać parsowania wielu nagłówków i plików źródłowych. W niektórych przypadkach semantic-ia-fast-jump błędy z komunikatem semantic-ia--fast-jump-helper: Tag SomeFunction has no buffer information nawet jeśli gtags-find-tag znajduje go natychmiast (w tym samym projekcie), choć może w nieaktualnej lokalizacji; może to być tymczasowy błąd, zwykle semantic-ia-fast-jump jest niezawodny.

Byłbym wdzięczny za wszelkie sugestie dotyczące sposobu

  • przepustnicy CEDET bez utraty wszystkie analizy semantycznej.
  • Dowiedz się, co spowodowało, że CEDET wymknął się spod kontroli, dzięki czemu mogę poprawić definicje projektów lub zgłosić raport o błędzie.
  • Ustal, dlaczego niektóre analizy semantyczne zawodzą.
  • Pobierz semantyczną, aby buforować więcej informacji, aby była bardziej responsywna, Mam dużo pamięci, której chciałbym użyć.
  • Zarządzaj GNU Global (twórz i zachowaj bieżące) dla wielu projektów w różnych miejscach, w tym katalogach systemowych.
  • Zarządzaj zależnościami między projektami, które skonfigurowałem z ede-cpp-root-project.
  • Zarządzaj projektami, które mają wiele konfiguracji kompilacji, każdy z własnym "config.h" i katalogiem kompilacji.

Istnieje kilka wskazówek w artykule http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html, szukam czegoś poza tym artykułem.

Odpowiedz

20

Narzędzia CEDET, których używasz, są ograniczone przez zdolność Emacsa do śledzenia każdego symbolu w twoim projekcie. Dobrym punktem wyjścia do dławienia tego, co robi CEDET/Semantic jest semanticdb-find-default-throttle. Jeśli wiesz, jak zorganizowany jest Twój projekt, możesz wyłączyć niektóre wyszukiwania, aby przyspieszyć działanie.

CEDET przeanalizuje wiele plików, które według Ciebie mogą być potrzebne, co również zapełni pamięć. W takim przypadku można dostosować semantic-idle-scheduler-max-buffer-size, aby wyłączyć parsowanie dużych plików, semantic-idle-work-parse-neighboring-files-flag, aby wyłączyć analizowanie losowych elementów w pobliżu, oraz opcję "semantycznej-pracy-aktualizacji-nagłówków-flag" w celu wyłączenia analizowania nagłówków. Zauważ, że ostatnie 2 domyślnie są zerowe, ale są włączone przez niektóre z funkcji automatycznej konfiguracji.

CEDET/Semantic buforuje wiele danych w pamięci i tworzy posortowane tabele wyszukiwania w celu zwiększenia wydajności. Jeśli zauważysz, że edytujesz dużo plików nagłówkowych, te zmiany powodują, że pamięci podręczne przestają być aktualne i zmuszają je do przebudowania. Jeśli wiele razy wyjdziesz i uruchomisz Emacs, to zmusza Semantic do ponownego załadowania dużych tabel bazy danych.

Inną możliwością jest ustawienie semanticdb-persistent-path, aby wyświetlić tylko te katalogi, na których Ci bardzo zależy. Spowoduje to ograniczenie zapisanych danych, które nie zostaną ponownie załadowane. Jeśli zajdzie taka potrzeba, w razie potrzeby dokona ponownej analizy, ale pomoże ograniczyć łączne dane.

Można również użyć semantic--before-fetch-tags-hook do funkcji, która zwraca zero w różnych warunkach.Znajdź pliki, których przetwarzanie zajmuje dużo czasu ze względu na rozmiar, opóźnienie sieci lub inne, i skonfiguruj je tak, aby nigdy nie były analizowane. To też zaoszczędzi trochę czasu.

Korzystanie z GNU Global to dobry sposób na przyspieszenie działania. Użycie go z semantycznym symref spowoduje, że pliki, które znajdzie, przeszukują, aby dostarczyć wymagane dane do wyświetlania wyników. Nie ma za wiele do zrobienia.

W przypadku błędu, który Państwo znaleźli powyżej, jeśli potraficie zidentyfikować sposób jego powielenia, proszę udostępnić go na liście dyskusyjnej cedet-devel, aby mógł zostać naprawiony. Ten typ błędu pojawił się wcześniej, zwykle, gdy znacznik GNU Global nie jest w stanie przekonwertować tagu bufora.

Aby debugować CEDET, wymykając się spod kontroli, użyj funkcji semantic-debug-idle-function i semantic-debug-idle-work-function, aby zawęzić działanie. Zobacz wyżej o niektórych konfiguracji tam.

Możesz użyć cedet-gnu-global-create/update-database, aby zaktualizować bazę danych lub dodać ją do haka. Nie sądzę, że dotarło to jeszcze do doktora.

Zarządzanie projektem jest trudne. Większość wbudowanych projektów nadaje się do małych rzeczy. Szczególnie duże projekty z niestandardowymi systemami kompilacji zwykle gwarantują niestandardowy typ projektu EDE. Tworzenie nowych projektów nie jest złe. Jeśli spojrzysz na ede-linux lub ede-emacs, możesz nauczyć się podstaw. W swoim projekcie niestandardowym możesz zamknąć wszystkie powiązane projekty i zastąpić funkcje, takie jak makra, dodać katalogi i polecenia kompilacji. Musiałem napisać niestandardowy projekt również do mojej pracy. To było bardzo podobne do ede-linux z rzeczami unikalnymi dla tego, gdzie pracuję.

Powiązane problemy