2010-06-02 10 views
11

¿Hay alguna manera en Emacs de averiguar qué otros lugares del código llaman a una función específica? Con mi configuración actual (GNU emacs 23.1.1, C codebase), normalmente tengo que buscar en toda la base de código el nombre de la función para ver qué otras funciones la llaman. Sería bueno si pudiera mostrar de manera eficiente todos los nombres de las funciones que llaman a esta función específica que estoy viendo.¿Puede Emacs mostrarme dónde se llama una función específica?

+0

¿Cual idioma? –

+0

Estoy usando Emacs para la compilación de programación C con GCC 4.4.3 en Linux – ant2009

Respuesta

11

Puede utilizar la función semantic-symref (C-c , G) del paquete de CEDET. Puede usar las bases de datos GNU Global o CTags para encontrar llamantes si existen. También podría analizar fuentes para encontrar ocurrencias.

1

Aquí hay un fragmento de mis viejos .emacs archivo

que hace: pedir algo para encontrar a partir de archivos de símbolos etags-(find-tag-tag) grep para ello de acuerdo con el modo de

(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 puede usar grep para encontrar a los llamantes –

Cuestiones relacionadas