2010-09-06 12 views
7

? Estoy manteniendo el código de otra persona. El código está escrito en C usando GCC 4.4.3 en la plataforma Linux. Sin embargo, el código salta mucho y es difícil averiguar de dónde se llaman todas las funciones.¿Existe alguna función en Emacs para la jerarquía de llamadas de función

En Visual Studio, hay una función llamada 'Call Hierarchy' que mostrará desde donde se llaman y se llaman las funciones. ¿Tiene Emacs (23.1.1) alguna de estas características?

Respuesta

6

La forma clásica de Emacs para saltar a las llamadas es utilizar TAGS archivo y usar el M-. comando. Recomiendo el uso de Exuberant C Tags con el siguiente comando en el directorio raíz del proyecto:

ctags -e --c-kinds=+pxd -R . 

Luego, utilizando visit-tags-table se puede abrir el fichero de etiquetas. Con M-. puede saltar a cada definición o llamada a su palabra clave. Use C-uM-. para saltar a otra ocurrencia. Utilice C-xzzz ... para repetir la búsqueda.

Si tiene muchos proyectos, puede crear un archivo TAGS para cada uno de ellos y luego llamar a visit-tags-file para agregar el archivo TAGS a su lista de archivos TAGS para buscar.

Otra forma clásica (la ONU * x cierto), es utilizar el comando M-xfind-grep para buscar las apariciones de la palabra clave.

+0

Gracias, acabo de intentarlo en un pequeño proyecto de muestra. Funcionado bien. Sin embargo, no estoy seguro de su comando para crear el archivo de etiquetas. ctags -e --c-types = pxd -R. Puedo entender las etiquetas -e- para emacs. --c - c idioma. -R Recursivo, entonces revise todos los archivos y directorios al crear el archivo de etiquetas. Sin embargo, ¿qué es -kinds = pxd? No estoy seguro de eso Muchas gracias. – ant2009

+0

@Jermoe. Me pregunto cómo se actualiza los archivos TAGS. Acabo de agregar algunas funciones nuevas. Sin embargo, no puedo navegar hacia ellos ya que dice "No hay etiquetas que contengan ...". Me parece que tengo que eliminar mi archivo TAGS y luego generar uno nuevo. ¿Es esto correcto? Gracias. – ant2009

+0

haga un ctags --list-kinds = c para saber qué tipos de elementos C puede agregar o eliminar del archivo TAGS usando --c-types. –

Cuestiones relacionadas