2012-01-19 15 views
5

¿Alguien conoce una herramienta que pueda crear "diagramas de función" a partir del código ansi c?Diagrama de bloques de función de creación automática a partir del código ansi c

Por "diagrama de función" me refiero a un gráfico que representa una visión general de los archivos, las funciones y sus relaciones. Me imagino que será algo así como un diagrama circut.

Ej. si tienen el siguiente código:

//MyProgram.c 
int main(int argc, char** argv) 
{ 
    Foo(); 
    Bar(); 
    return 0; 
} 

//Slave.h 
void Foo(); 
void Bar(); 

El gráfico sería algo como la siguiente imagen:

Function relation diagram http://i44.tinypic.com/503z7q.png

¿Tiene un nombre oficial? Diagrama de dependencia, tal vez?

He mirado un poco en Doxygen. Pero eso indica claramente que: Doxygen tiene soporte integrado para generar diagramas de herencia para las clases de C++. Lo mismo con muchas herramientas UML. No tengo ninguna clase Aunque mis archivos c pueden acercarse.

+0

Quizás debería añadir que mi propósito con el diagrama es presentar una visión general de un proyecto de código dado. Una mano útil en "encontrar el lugar correcto para mirar, en el código". La agrupación de archivos y libs es importante. Y las relaciones de función darán el contenido real. Tal vez conoces un diagrama mejor? ¿Algo basado en archivos/librerías? – Illishar

+0

El "gráfico de dependencias" aquí: http://msdn.microsoft.com/en-us/library/ff657798.aspx, en realidad se ve bastante bien. Simplemente carece de las relaciones de función. – Illishar

+0

doxygen es capaz de extraer todo tipo de gráficos, no solo diagramas de herencia. –

Respuesta

5

Lo que usted llama se llama Call Graph.

Hay una lista de herramientas para generarlos: http://en.wikipedia.org/wiki/Call_graph#Software

+0

La mayoría de los gráficos de llamadas que he visto, ponen todas las funciones en un cubo grande y luego generan un árbol (si tiene suerte). Son muy amables cuando hacen perfiles. En este caso, estoy más interesado en la relación entre archivos que en la secuencia del gráfico de llamadas. UML sería un golpe mejor, creo. Pero tal vez usted tiene un programa específico en mente? – Illishar

+0

La mayoría de los IDE ya son compatibles con gráficos de llamadas en estos días. – dicaprio

+0

He revisado la lista y no puedo encontrar ninguna que pueda crear un "gráfico de llamadas ordenadas por archivo". Solo son árboles con la función de llamada principal como nodo superior. (Y realmente no estoy buscando árboles en absoluto.) – Illishar

3

Hay par de software que no es libre más www.scitools.com por ejemplo, que tiene una herramienta llamada Understand C. Estoy seguro de que hará lo que está buscando, hay otras herramientas como BOUML (esta es una herramienta gratuita). Aparte de esto, la lista proporcionada por qiao es una buena referencia.

+0

BOUML es para C++ – Illishar

+0

scitool tiene algunos gráficos interesantes. Su gráfico de dependencia está cerca: http://www.scitools.com/images/features/dependenciesGraph.png. Aún así, no muestra las relaciones de función y ciertamente no ofrece una descripción general. Cualquiera que mire esto se escapará grabándose. (Una cuestión de gusto y complejidad quizás). – Illishar

+0

cierto, pero aún hace lo que necesita. Supongo que no desea generar o regenerar el código. – dicaprio

0

Creo que he encontrado el origen de mi idea. Mostrar el código como "componentes con entrada/salida conectada" es un concepto de LabVIEW. (No soy un completo loco para buscar este tipo de diagrama;)

Sin embargo, hasta donde yo sé, LabVIEW no hace lo que yo quiero. LabVIEW es para construir y conectar funcionalidad. Ampliamente utilizado por personas hw/fw. (Que también son mi público objetivo). No convertirá el código de ingeniería inversa en diagramas.

Es extraño que estos diagramas no existan realmente. Me parece que las personas como los programadores embebidos, ansi c, low level, hw etc. les encantaría.

Cuestiones relacionadas