GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich die Aufrufer und Aufgerufenen einer Funktion im C-Code in vi/vim?

cscope Minimalbeispiel

Ingo hat es erwähnt, hier ist ein Beispiel.

Zuerst sollten Sie Ihren .vimrc einschalten :

set cscopequickfix=s-,c-,d-,i-,t-,e-

Gehen Sie dann in das Basisverzeichnis Ihres Projekts und führen Sie Folgendes aus:

cscope -Rb

Dies erzeugt eine cscope.out Datei, die die geparsten Informationen enthält. Die Generierung ist ziemlich schnell, selbst für große Projekte wie den Linux-Kernel.

Öffnen Sie vim und führen Sie Folgendes aus:

:cs add cscope.out
:cs find c my_func

c ist eine Abkürzung für callers . Die andere cscope sofern auch Abfragen möglich sind, sind Mnemonics aufgeführt unter:

help cscope

Dies fügt der Quickfix-Liste eine Liste der Anrufer hinzu, die Sie öffnen können mit:

:copen

Gehen Sie zu der Zeile, die Sie interessiert, und drücken Sie die Eingabetaste, um dorthin zu springen.

Um Aufrufer des Funktionsnamens zu finden, der sich gerade unter dem Cursor befindet, fügen Sie zu Ihrem .vimrc hinzu :

function! Csc()
  cscope find c <cword>
  copen
endfunction
command! Csc call Csc()

und geben Sie :Csc<enter> ein wenn sich der Cursor über der Funktion befindet.

ZU TUN:

  • tun Sie dies für die aktuelle Funktion unter dem Cursor mit einem einzigen Befehl. Verwandt:Funktionsnamen in der Statuszeile anzeigen
  • automatisch die nächstgelegene Datenbank (übergeordnete Verzeichnisse) hinzufügen, wenn Sie eine Datei eingeben:wie cscope.out automatisch in vim geladen wird
  • Öffnen Sie den Anrufgraphen interaktiv wie Eclipse. Verwandt:Aufrufbaum aus cscope-Datenbank generieren

Ein Tipp:Ich liebe vim, aber es ist zu kompliziert für mich, so etwas einzurichten. Und es berücksichtigt keine Klassen, z. in C++. Wenn Ihnen ein Projekt wichtig genug ist, versuchen Sie, das Projekt auf einer "IDE" zum Laufen zu bringen. Es kann einen gewissen Overhead mit sich bringen, wenn das Projekt die IDE-Konfigurationsdateien nicht verfolgt (die sich automatisch ändernde Blobs sind, die das Repo verschmutzen ...), aber es ist es mir wert. Für C/C++ war mein Favorit bisher KDevelop 4.


Dafür integriert sich Vim mit dem cscope Werkzeug; siehe :help cscope für weitere Informationen.


Linux
  1. Wie finde ich den Typ einer Img-Datei und mounte sie?

  2. Wie zeige ich Zeilennummern in vi/vim an?

  3. Aufrufen von C-Funktionen in C++, C++-Funktionen in C (C und C++ mischen)

  4. So erhalten Sie alle Dateien, die eine bestimmte Größe überschreiten, und löschen sie

  5. Wie finde ich die maximale Stapelgröße?

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

So finden Sie heraus, wer das Linux-System wann neu gestartet hat

So finden Sie die Prozess-ID eines Programms und beenden es [Kurztipp]

So finden Sie die PID und PPID eines Prozesses in Linux

So finden und ersetzen Sie Text in Vim

So finden Sie den Standort Ihrer Server mit Traceroute und WHOIS