2010-02-01 26 views
10

Quiero generar árboles de llamadas completos y parciales desde la base de datos cscope de proyectos c y C++ en Linux.Generar Call-Tree desde la base de datos cscope

El proyecto es bastante grande, por lo que puede no ser fácil trabajar con el árbol de llamadas completo del proyecto, por lo que quiero limitar la generación del árbol de llamadas con un filtro tipo grep de nombres de funciones.

Y también quiero ser capaz de construir subárboles "llamados por" y "llamados desde" desde cualquier punto.

Así que la herramienta debe ser interactiva y fácil de parchar.

PS: Quiero usar la base de datos cscope, porque ya se usa en proyectos y su generación es bastante rápida. Yo uso el editor vim y tengo el sistema X windows.

Hay programa cbrowser en sourceforge, pero su funcionalidad call-tree (callgraph) está rota.

+0

¿Cscope maneja las llamadas a métodos indirectos o virtuales? Si no es así, ¿cuál es el significado de su "árbol de llamadas completo"?Si está dispuesto a conformarse con un "árbol de llamadas parcial", cuán parcial puede ser (el árbol de llamadas vacío es un árbol de llamadas parciales válido, pero no es muy interesante). –

+0

Uso cscope para el proyecto C. No necesito que sea muy exacto, solo a tal grado como lo hace cscope con consultas "llamadas a" y "llamadas desde". Quiero obtener un gráfico completo de funciones en el proyecto big c. Debe incluir llamadas a funciones explícitas. cualquier otra cosa es opcional. – osgx

Respuesta

1

No conozco ningún programa, aparte de cscope, que lea las bases de datos de cscope. Incluso la funcionalidad cstag de vim solo comienza un proceso cscope de fondo que consulta.

En cuanto a la generación del gráfico de llamadas, si no te importa salir de cscope, me gusta más lo que doxygen crea. Pueden ser un poco grandes, pero también generan el gráfico de casi todos los puntos, y es increíblemente fácil navegar por la fuente directamente en él.

+0

cbrowser de sourceforge lee cscope db. – osgx

1

kscope puede ser otra opción. No estoy seguro de si hará todo lo que se especifica, pero es bastante versátil para una aplicación GUI.

Se recomienda a los usuarios de Ubuntu que tengan problemas para hacerlo funcionar seguir these instructions.

+0

screenshoots de call-tree parece ser http://sourceforge.net/dbimage.php?id=200328 – osgx

+0

@osgx: Gracias. Aunque no estoy seguro si el OP está buscando un árbol en ese sentido, o para un [call * graph *] (http://kscope.sourceforge.net/callgraph.png). – intuited

+0

estoy buscando ambos. el árbol es bueno, el callgraph es mejor, y el mejor es el callgraph para parte de las funciones. (filtrado o subgrafo). Y soy OP: – osgx

1

Tengo este script de Bash basada en cscope para trabajar en Cygwin & de Windows: http://toolchainguru.blogspot.com/2011/03/c-calltrees-in-bash-revisited.html

Ver ejemplo llamada "graph" (He estado llamando a que una llamada "árbol", gritos). See example from the Linux kernel.

Requiere cscope (por supuesto) y graphviz. Es capaz de hacer gráficos ascendentes y descendentes, así como gráficos descendentes combinados & (ver ejemplo).

No lo he demostrado aquí pero este método funciona bastante bien en proyectos grandes donde la misma función se puede definir en múltiples directorios. Solo habrá un nodo dibujado para el mismo nombre de función (por lo que un nodo "principal" incluso si tiene múltiples main() 's definidos en la estructura de su directorio) --- y tendrá múltiples bordes que emanan de dicho nodo , con indicadores de archivo/línea. Encontré este aspecto más útil que GNU cflow, que insistía en elegir solo un directorio para mirar. (El guión de Jason Nyberg Bash no funciona bien con el subprocesamiento, que GNU cflow maneja muy bien, algo a tener en cuenta .)

Cuestiones relacionadas