GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare i chiamanti e il chiamato di una funzione nel codice C in vi/vim?

esempio minimo di cscope

Ingo ne ha parlato, ecco un esempio.

Per prima cosa dovresti impostare il tuo .vimrc :

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

Quindi vai alla directory di base del tuo progetto ed esegui:

cscope -Rb

Questo genera un cscope.out file che contiene le informazioni analizzate. La generazione è ragionevolmente veloce, anche per progetti enormi come il kernel Linux.

Apri vim ed esegui:

:cs add cscope.out
:cs find c my_func

c è un mnemonico per callers . L'altro cscope a condizione che siano possibili anche query, gli mnemonici sono elencati sotto:

help cscope

Questo aggiunge un elenco dei chiamanti all'elenco Quickfix, che puoi aprire con:

:copen

Vai alla linea che ti interessa e premi invio per saltare lì.

Per trovare i chiamanti del nome della funzione attualmente sotto il cursore, aggiungi al tuo .vimrc :

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

e inserisci :Csc<enter> quando il cursore è sopra la funzione.

DA FARE:

  • fallo per la funzione corrente sotto il cursore con un singolo comando. Correlati:mostra il nome della funzione nella riga di stato
  • aggiungi automaticamente il database più vicino (directory padre) quando inserisci un file:come caricare automaticamente cscope.out in vim
  • apri in modo interattivo il grafico delle chiamate come Eclipse. Correlati:Genera albero delle chiamate dal database cscope

Un consiglio:adoro vim, ma è troppo complicato per me impostare questo genere di cose. E non tiene conto delle classi, ad es. in C++. Se un progetto conta abbastanza per te, prova a far funzionare il progetto su qualche "IDE". Potrebbe comportare un sovraccarico se il progetto non tiene traccia dei file di configurazione IDE (che sono BLOB a modifica automatica che inquinano il repository ...), ma per me ne vale la pena. Per C / C++, il mio preferito finora era KDevelop 4.


Per questo, Vim si integra con cscope attrezzo; vedi :help cscope per ulteriori informazioni.


Linux
  1. Come trovare il tipo di un file Img e montarlo?

  2. Come chiamare la funzione C in C++, la funzione C++ in C (mix di C e C++)

  3. Come ottenere tutti i file che superano determinate dimensioni ed eliminarli

  4. Come trovo la dimensione massima dello stack?

  5. Come trovo l'UUID di un filesystem

Come trovare ed elencare in modo ricorsivo i file per data in Linux

Come scoprire chi ha riavviato il sistema Linux e quando

Come trovare l'ID di processo di un programma e ucciderlo [Suggerimento rapido]

Come trovare il PID e il PPID di un processo in Linux

Come trovare e sostituire il testo in Vim

Come trovare la posizione dei tuoi server con Traceroute e WHOIS