2010-06-02 21 views
11

C'è un modo in Emacs per scoprire quali altri posti nel codice chiamano una funzione specifica? Con il mio setup corrente (GNU emacs 23.1.1, C codebase), normalmente devo cercare l'intero codice base per il nome della funzione per vedere quali altre funzioni lo chiamano. Sarebbe bello se potessi visualizzare in modo efficiente tutti i nomi delle funzioni che chiamano questa funzione specifica che sto guardando.Can Emacs può mostrarmi dove viene chiamata una funzione specifica?

+0

Quale lingua? –

+0

Sto usando Emacs per la compilazione di programmazione C con GCC 4.4.3 su Linux – ant2009

risposta

11

È possibile utilizzare la funzione semantic-symref (C-c , G) dal pacchetto CEDET. Può utilizzare i database GNU Global o CTags per trovare i chiamanti se esistono. Potrebbe anche analizzare le fonti per trovare le occorrenze.

1

: ecco un frammento dal miei vecchi .emacs

lo fa: cosa chiedere di trovare da etags-tagfile (find-tag-tag) grep per esso secondo le modalità

(defun find-caller (tagname) 
    "Find occurences of tagname in files in the current directory 
matching extension of current file." 
    (interactive (list (find-tag-tag "Find caller: "))) 
    (let ((cmd "grep -n ")) 
    (cond 
    ((member major-mode '(lisp-mode cmulisp-mode)) 
     (grep (concat cmd "-i '" tagname "' *.lisp"))) 
    ((eq major-mode 'c-mode) 
     (grep (concat cmd "'" tagname "' *.[ch]"))) 
    ((member major-mode '(latex-mode tex-mode)) 
     (grep (concat cmd "-i '" tagname "' *.tex"))) 
    ((eq major-mode 'emacs-lisp-mode) 
     (grep (concat cmd "'" tagname "' *.el"))) 
    (t (grep (concat cmd "'" tagname "' *")))))) 
+1

solo FYI: CEDET può usare grep per trovare i chiamanti –

Problemi correlati