2010-05-06 19 views
11

Ya sea que estemos manteniendo un código desconocido o comprobando los detalles de implementación de un módulo Apache, puede ser útil si podemos atravesar rápidamente el código y generar una visión general de lo que hacemos ' Estoy mirando. Grep atiende la mayoría de mis necesidades diarias, pero hay algunos casos en los que simplemente no sirve.Listado de funciones C/C++ (Análisis de código en Unix)

Aquí hay un ejemplo común de cómo puede ayudar. Para encontrar la definición de una función PHP que estoy interesado puedo escribir esto en la línea de comandos:

grep -r "function myfunc" . 

Esto podría adaptarse muy rápidamente a C o C++ si conocemos el tipo de retorno, pero las cosas se vuelven más complicada si, por ejemplo, quiero enumerar todos los métodos que mi clase proporciona:

grep "function " ./src/mine.class.php 

ya que no hay palabra clave única que denota una función o método en C++ y porque es la sintaxis general más complejo, creo que necesitaría algún tipo de herramienta de análisis de código estático, uso inteligente del preprocesador C o fe ciega, el codificador siguió estrictas pautas de código (# de espacio en blanco, posición de curvatura ies, etc.) para obtener este tipo de resultados.

¿Qué recomendarías?

Respuesta

15

Ejecútelo a través de Doxygen. Se quejará por la falta de comentarios, pero igual producirá gráficos de llamadas y enumerará todas las funciones. Presentado en HTML con enlaces para seguir rutas de código.

doxygen

+2

+1 También debe habilitar la opción que genera el código fuente en HTML ("SOURCE BROWSER"). El código resultante contendrá hipervínculos que facilitarán la navegación por el código fuente. –

+0

+1 Acabo de comenzar a usar Doxygen para generar diagramas usando GraphViz para ayudarme a recordar el flujo de datos. –

9

exuberante Ctags http://ctags.sourceforge.net/

sólo he utilizado de vez en cuando hace algún tiempo, y desde el interior de un editor de texto, pero echa un vistazo a la lista de utilidades/herramientas que pueden utilizarlo :

http://ctags.sourceforge.net/tools.html

+0

ctags es ideal para investigar código nuevo, y es ampliamente compatible con IDE y editores. Vaya al directorio que está mirando, ejecute 'ctags -R', inicie su editor favorito y saltee el código. En vim usas 'ctrl-]' para saltar a una definición y 'ctrl-t' para saltar hacia atrás. – Winder

4

Doxygen es capaz de generar algún tipo de documentación hTML razonable y analizar fuera de los comentarios. No es perfecto, pero podría ayudar. Puede incorporar Ctags en su editor para saltar a las funciones que está buscando.

Personalmente, yo uso grep;)

+0

También uso grep en mi propio proyecto cuando necesito encontrar algo ... pero un verdadero IDE para editar el código Y tener la declaración/definición solo a un lado es demasiado poderoso para dejar pasar IMNSHO. –

+0

Para proyectos con los que no estoy familiarizado, estoy totalmente de acuerdo en que un IDE es fantástico. – Stephen

2

grep '^[a-zA-Z0-9][ *]+ {[a-zA-Z0-9_]+}\([a-zA-Z0-9\,\.\-\>]\*\)$'

es aproximadamente lo que quiere. Puede tomar algunos juegos con, pero emparejar un tipo válido de retorno de C++, dar la opción de que sea un puntero, luego un nombre de función (que será \ 1), abrir paréntesis, parámetros, cerrar.

Esa forma general (retorno, nombre, (param)) debería funcionar a menos que tenga saltos de línea dentro de una declaración de función.

Utilizaría Doxygen u otra herramienta para analizarlo, pero si necesita hacerlo rápidamente y una vez, la expresión regular podría ser más fácil (o no, con expresiones regex nunca se sabe).

4

cscope es muy bueno para este tipo de cosas. A diferencia de ctags, cscope proporciona una interfaz adecuada para la búsqueda (ctags requiere un editor).

Simplemente ejecute cscope en el directorio raíz del código que desea inspeccionar.Será: crear una base de datos si uno no está allí, actualizar la base de datos si uno está allí, y abrir una interfaz gráfica de usuario maldiciones donde se puede consultar todo tipo de información útil

  • todas las referencias a un símbolo
  • mundial
  • definiciones
  • funciones llamadas por una función
  • las funciones de llamada una función
  • cadena de texto
  • patrón de expresión regular
  • un archivo
  • archivos incluyendo un archivo

ctags sólo la primera de ellas, 'todas las referencias a un símbolo'.

Cuestiones relacionadas