Wie kann ich schnell alle enthaltenen Header-Dateien in einem Projekt für eine bestimmte Funktion oder ein Makro durchsuchen?

8

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!

    
JJC 27.03.2012, 10:57
quelle

7 Antworten

4

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 .

    
hroptatyr 27.03.2012, 11:09
quelle
1

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+]

    
llj098 27.03.2012 11:15
quelle
1

Hier ist, was Sie tun können, vorausgesetzt, Sie verwenden gcc, wenn Sie es nicht nur entsprechend ändern.

%Vor%     
pizza 27.03.2012 20:09
quelle
0

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 .

    
ks1322 27.03.2012 11:17
quelle
0

vim + ctags ist der richtige Weg. Sie können zu Funktionen, globalen Variablen, Makros usw. springen und diese definieren.

Programme mit Tags durchsuchen

Wenn Sie auch schnell zwischen .c- und .h-Dateien wechseln möchten, lesen Sie bitte dieses blog

    
Jinghao Shi 27.03.2012 11:22
quelle
0

Sie können cscope oder emacs/vim + xcscope.el einfach verwenden. Ich denke, es ist Teig als Cage und Etage.

    
madper 27.03.2012 11:30
quelle
0

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.

    
Sebastian Mach 27.03.2012 12:03
quelle

Tags und Links