Ich schreibe einen Leitfaden für Ebrowse und werde ihn in dieser Woche veröffentlichen. Ebrowse ist ein schneller Parser, mit dem C ++ - Quelldateien verarbeitet werden, um eine Datenbank zu erstellen, die die Klassenhierarchie enthält, die später von Emacs verarbeitet wird, um eine Klassenbaumdarstellung zu erstellen. Es ähnelt etwas GNU Global, ist jedoch in Emacs integriert und erzeugt einen Klassenbaum, sodass die Verarbeitung in einem großen Quellbaum länger dauert.
So verwenden Sie Ebrowse:
find . -name '*.cpp' -or -name '*.h' | ebrowse
Fügen Sie weitere Erweiterungen hinzu, wenn Sie möchten. Wenn Ihr Projekt nur Hunderte von Dateien enthält, funktioniert = Ebrowse = sehr gut. Nach dem Ausführen des Befehls wird eine Datei mit dem Namen BROWSE
generiert. Dies ist die Datenbank, die die Klassenhierarchie enthält. Öffnen Sie einfach diese Datei und Emacs erkennt die Datei automatisch und verarbeitet sie. Nach Abschluss der Verarbeitung der Datenbank zeigt Emacs einen Index aller Klassen in der Datenbank in einem Baumformat an: Wenn eine Klasse von einer Klasse abgeleitet ist, ist sie in der übergeordneten Klasse verschachtelt. Dieser Puffer heißt a Tree buffer
. Emacs bietet drei Möglichkeiten zur Interaktion Ebrowse
:
Tree
buffer: Ein Puffer, der den Baum anzeigt.
Member
buffer: Ein Puffer, der Mitglieder jeder Klasse anzeigt. Sie können zwischen Deklarationen und Definitionen einer Klasse wechseln und zum jeweiligen Speicherort in der entsprechenden Quelldatei springen.
Source
Puffer: Ihr Code-Puffer. Sie können mit Ebrowse
Datenbanken wie dem Suchen und Anzeigen (offen für schreibgeschützte) Deklarationen und Definitionen interagieren und einen = Member = Puffer einer Klasse öffnen, die das Tag an Punkt enthält ...
Wenn Sie ein großes Projekt haben (dh mehr als 10000 cpp-Dateien), aber alle Klassen in .h
Dateien enthalten sind, fügen Sie keine hinzu, da das .cpp
Generieren der BROWSE
Datei sonst sehr lange dauern würde . Sie verlieren jedoch die Möglichkeit, zur Definition zu wechseln. Dies kann jedoch mit ctags
oder erfolgen GNU Global
. Das Wichtigste ist, die Klassenhierarchie in anzuzeigen Tree buffer
, und dies ist der Vorteil von Ebrowse.
Der WIP-Leitfaden ist hier .
Update : Alternativ können Sie doxygen verwenden , um alle Arten von Diagrammen zu generieren (Anrufer- / Angerufendiagramme, Abhängigkeitsdiagramme, Klassenhierarchiediagramme ...), aber es dauert auch lange, alle zu generieren, selbst für kleine Quellbäume wie ipxe . Dies ist nicht doxygen
so langsam, tatsächlich ist es ziemlich optimiert, aber die Berechnung der Abhängigkeit für die gesamte Codebasis ist keine triviale Aufgabe.
Bonus : Wenn Sie mit C arbeiten und ein Anrufdiagramm anzeigen möchten, verwenden Sie GNU Cflow. Siehe meine Reddit-Antwort .
bin
Verzeichnis befinden, das Emacs enthält. Wenn Sie alsoemacs
in der Befehlszeile ausgeführt werden können, sollten Sie in der Lage sein, auszuführenebrowse
.Sie können eine schöne Steuerungsoberfläche haben , die Sie interaktiv verwenden können
cscope
:http://wikemacs.org/wiki/Python#Indexing_sources:_ctags.2C_cscope.2C_pycscope
https://github.com/sergey-pashaev/helm-cscope
Wir haben dann Funktionen wie
M-x helm-cscope-find-global-definition
verfügbar. Die Navigation ist schneller.quelle
etags
"Tag-Vervollständigungstabellecscope
hilft dabei (besser alsetags
) und ist das allerletzte Wort seiner Frage :)etags
mit Projekten verwendet werden kann, obwohl andere Lösungen wie GNU Global ausprobiert wurden (was definitiv besser ist alsctags
). Für eine Klassenhierarchie ist Eborwse oder ein externes Tool wie Doxygen jedoch eine praktikable Option. Und der allererste Satz lautet: "Ich arbeite mit einer großen Codebasis und finde es oft mühsam und schwer, Klassenbeziehungen zu verstehen " :)cscope
hilft bei Klassenbeziehungen, weil wir "herausfinden können, wer diese Klasse anruft" und ähnliches. ok, ich bin nicht perfekt in dem Thema, aber habe immer noch meinen Platz :)