Hier ist ein Problem, das ich in letzter Zeit hatte, das hier für andere nur ein üblicher Schmerz sein muss.
Ich arbeite mit dem älteren C-Code von jemand anderem und muss herausfinden, wo eine Funktion oder ein Makro definiert wurde. Der Code #include
ist eine Sammlung verschiedener Standardsystembibliotheken zusätzlich zu denen des spezifischen Projekts.
Gibt es ein Werkzeug oder eine Technik, um schnell zu finden, wo eine bestimmte Funktion, ein Makro (oder ein anderes globales) definiert wurde?
Ich habe es versucht:
%Vor%und andere ähnliche * nix / bash-fu mit nur begrenztem Erfolg und viel nervigem Spreu zum Aussortieren. Einer von euch weisen Kodierern da draußen muss eine gute Lösung für dieses scheinbar übliche Szenario haben.
Ich war sehr überrascht, keine weitere Frage zu diesem speziellen Schmerz hier oder bei meinen Recherchen zu den Interwebs zu finden. (Ich bin mir sicher, dass es böse Kommentare geben wird, wenn ich einen verpasse ...; -))
Vielen Dank im Voraus für irgendwelche Tipps!
Verwenden Sie etags
/ ctags
aus dem überschwänglichen Ctags-Projekt in Verbindung mit einem Editor (emacs, vim), der sie versteht oder GNU GLOBAL .
Oh, und wenn du zufällig automake verwendest, erzeugt es ein Ziel TAGS
. Also keine komplizierten manuellen Aufrufe von {c,e}tags
.
Verwenden Sie ctags / cscope + vim / emacs
Sie können für ihre Detailnutzung googlen.
Wenn Sie ctags + vim verwenden, können Sie:
1. Gehen Sie in das Verzeichnis /usr/include
, führen Sie ctags -f tags1 -R .
aus, generieren Sie die Tags
2. Erzeugen Sie Tags für Ihren Code in Ihrem Code-Verzeichnis ctags -f tags2 -R
.
3.run :set path+=tags1,tags2
in deinem vim
4.unter einer Funktion oder einem Marco versuchen Sie CTRL+]
Sie können Eclipse CDT verwenden. Zum Beispiel wird hier beschrieben, wie man das CDT-Projekt so einrichtet, dass es durch die Linux-Kernel-Quelle navigiert - Wie man das CDT benutzt, um durch die Linux-Kernel-Quelle zu navigieren .
vim + ctags ist der richtige Weg. Sie können zu Funktionen, globalen Variablen, Makros usw. springen und diese definieren.
Wenn Sie auch schnell zwischen .c- und .h-Dateien wechseln möchten, lesen Sie bitte dieses blog
Vorausgesetzt, dass die richtigen Header enthalten sind, die direkt oder indirekt definieren, nach was Sie suchen, verfügen die meisten IDEs über eine Funktion zum Springen nach Definition, die funktioniert.
Die Tags-Ansätze sind natürlich nett, weil sie nicht von korrekt eingebundenen Headern abhängen.
Tags und Links c c++ search header-files