2012-03-27 9 views
8

Aquí hay un problema que he tenido recientemente que sólo tiene que ser un dolor común a otros aquí.¿Cómo puedo buscar rápidamente todos los archivos de encabezado incluidos en un proyecto para una función o macro específica?

Estoy trabajando con el código C legado de otra persona y la necesidad de encontrar donde se definió una función o macro. El código #include es un montón de diferentes bibliotecas del sistema estándar, además de las del proyecto específico.

¿Hay una herramienta o técnica para encontrar rápidamente si una función determinada, macro, (u otro mundial para el caso) se define?

me trataron:

grep -R 'function' /usr/lib 

y otros similares * nix/bash-fu con éxito sólo limitado y un montón de paja molesto para Cull. Uno de ustedes, codiciosos sabios, debe tener una buena solución para este escenario aparentemente común.

me quedé muy sorprendido al no encontrar otra pregunta sobre este particular dolor aquí o en las búsquedas de la interwebs. (Estoy seguro de que habrá comentarios de enojo si me perdí uno ... ;-))

Gracias de antemano por cualquier consejo!

+1

Tenemos una combinación de Opengrok y Doxygen, que ayuda un poco ... – BoBTFish

Respuesta

4

Uso etags/ctags de la exuberant ctags project en conjunción con un editor (Emacs, vim) que los comprende, o GNU GLOBAL.

Ah, y si usa automake genera un objetivo TAGS. Por lo tanto, no es necesario realizar llamadas manuales complicadas al {c,e}tags.

+0

Gracias. Aunque había usado ctags antes, no me había dado cuenta de que podía usarlos para bibliotecas de sistemas existentes. Me gusta la capacidad de GNU GLOBAL para mostrar instancias de una función (es decir, mapeo inverso de lo que hace CTAGS). – JJC

1

Use ctags/cscope + vim/emacs

puede google para su uso detalle.

si utiliza ctags + vim, puede:

1.Go al directorio /usr/include, excute ctags -f tags1 -R . generar las etiquetas

etiquetas 2.generate de su código en el directorio de código ctags -f tags2 -R.

3.run :set path+=tags1,tags2 en su vim

4.Under una función o Marco tratar CTRL+]

0

vim + ctags es el camino a seguir. Puede saltar a y definición de funciones, variables globales, macros, etc. etc.

FYI, browsing programs with tags

Además, si se desea cambiar rápidamente entre .c y .h, por favor refiérase a this blog

0

puede usar cscope o emacs/vim + xcscope.el para hacerlo fácilmente.Creo que es rebozado que ctage y etage.

0

Si se incluyen los encabezados correctos que definen directa o indirectamente lo que se busca, la mayoría de los IDE tienen una funcionalidad de salto a la definición que funciona.

Los enfoques de etiquetas son, por supuesto, agradables porque no dependen de los encabezados incluidos correctamente.

1

Esto es lo que puedes hacer, suponiendo que uses gcc, si no solo modifícalo como corresponda.

gcc -E myfile.c | grep '^#' | cut -f 3 -d ' ' | sort |uniq | xargs -n 1 grep -l "MYMACROORFUNCTIONNAME" 
Cuestiones relacionadas