2010-07-01 11 views
15

Me han lanzado a un gran proyecto Fortran con una gran cantidad de archivos fuente.¿Cómo puedo visualizar el código fuente de Fortran (90 o posterior), p. usando Graphviz?

Necesito contribuir a este proyecto y me parece prudente que primero entienda la fuente.

Como primer paso, me gustaría visualizar las interdependencias entre los diversos archivos fuente, es decir, qué archivos fuente necesitan qué módulos. Hasta donde puedo decir, existen métodos automatizados para otros lenguajes y dan como resultado un gráfico que se puede construir usando Graphviz.

Pero, ¿hay alguien al tanto del software que pueda hacer esto para el código Fortran 90?

[Buscando la interwebs para ayuda Fortran es un dolor real a medida que termina la búsqueda en las inter-telarañas gracias a la omnipresente FORTRAN dolorosamente 77.]

Respuesta

9

Si usted tiene dinero, entonces Understand for Fortran es digno de mirar. Si no tiene dinero pero tiene la intención de trabajar rápidamente, entonces puede obtener una descarga de prueba del software.

Para un gráfico de llamadas estáticas, nunca he encontrado una herramienta gratuita tan útil como Understand; es difícil encontrar herramientas gratuitas y mucho menos útiles. Me gustaría escribir uno yo mismo, pero el mercado sería pequeña :-(

Para un gráfico dinámico de llamadas investigar sus opciones del compilador. Yo uso el compilador Fortran Intel que puede generar un montón de información útil acerca de un programa en ejecución. El TotalView depurador también puede visualizar el gráfico de llamadas de un programa en ejecución. También debe mirar gprof2dot que hace un archivo DOT de una llamada GPROF 'gráfico'. Esto es libre y está bien.

Y también debería agregar, aunque es no es algo que haya usado alguna vez, que Callgrind puede ser útil.

+0

Gracias por la respuesta. Sí, entender por Fortran parece ser el camino a seguir. – EMiller

20

Recomendaría doxygen, lo que genera automáticamente documentat ion desde el código fuente (y es gratis). Por lo general, agrega un margen a los comentarios que describen sus funciones y variables. Sin embargo, puede ejecutar doxygen en archivos fuente no documentados, siempre que establezca EXTRACT_ALL en YES en el archivo de configuración y haga que cree crear diagramas de relaciones para todas sus funciones (es decir, esta función llama a estas funciones y otras funciones).

Necesita GraphViz instalado para obtener los diagramas generados y tener la opción HAVE_DOT establecida en YES en el archivo de configuración.

Consulte la documentación de doxygen para graphs and diagrams para obtener más información y este example class documentation para obtener un ejemplo de la salida generada.

Editar: Por supuesto, para Fortran que debe establecer la opción OPTIMIZE_FOR_FORTRAN-YES en el archivo de configuración.

+0

Este método funcionó para mí usando los paquetes de Ubuntu disponibles para 'doxygen' y' graphviz'. Las opciones a las que se refiere Chris se encuentran en el archivo de configuración 'Doxyfile'. – ryanjdillon

+1

También hay un programa 'doxywizard' en el paquete' doxygen-ui' que hace las cosas bastante simples – naught101

+0

Intenté ambos, doxygen y Understand, y debo decir que el doxygen hace un trabajo increíble. En el archivo de configuración uso: HAVE_DOT = YES, CALL_GRAPH = YES, CALLER_GRAPH = YES, y finalmente EXTRACT_ALL = YES para incluir * todos * los archivos Fortran en los subdirectorios. – netzpurist

1

Puede utilizar callgrind desde dentro Valgrind:

valgrind --tool=callgrind [your program] 

Esto producirá un archivo callgrind.out.[pid]. Esto funciona mejor si compila su programa sin optimizaciones y con indicadores de depuración.

A continuación, tiene un par de opciones para la visualización de los datos:

  1. convertir la salida Callgrind a un archivo .dot con grof2dot, y luego verlo con xdot, o convertirla en un gráfico estático con GraphViz .
  2. Véalo directamente con Kcachegrind (incluye análisis de fuente y gráficos de llamada).
Cuestiones relacionadas