2010-07-01 16 views
15

J'ai été jeté dans un grand projet Fortran avec un grand nombre de fichiers source.Comment puis-je visualiser le code source Fortran (90 ou ultérieur), par ex. en utilisant Graphviz?

Je dois contribuer à ce projet et il semblerait prudent que je comprenne d'abord la source. Dans un premier temps, je voudrais visualiser les interdépendances entre les différents fichiers source, c'est-à-dire les fichiers sources qui ont besoin de quels modules. Autant que je sache, des méthodes automatisées existent pour d'autres langages et aboutissent à un graphe qui peut être construit en utilisant Graphviz.

Mais est-ce que quelqu'un est au courant des logiciels qui peuvent faire cela pour le code Fortran 90?

[Recherche interwebs pour l'aide Fortran est une vraie douleur que vous finissez par la recherche des remerciements entre des toiles d'araignée au FORTRAN douloureusement omniprésent 77.]

Répondre

9

Si vous avez de l'argent alors Understand for Fortran vaut regarder. Si vous n'avez pas d'argent mais que vous avez l'intention de travailler rapidement, vous pouvez vous débrouiller avec un téléchargement d'essai du logiciel.

Pour un graphique d'appel statique, je n'ai jamais trouvé un outil gratuit aussi utile que Comprendre; il est difficile de trouver des outils gratuits et encore moins utiles. J'en écrirais un moi-même mais le marché serait minuscule :-(

Pour un graphe d'appel dynamique examinez vos options de compilateur.J'utilise le compilateur Intel Fortran qui peut générer un tas d'informations utiles sur un programme d'exécution. débogueur peut également visualiser le graphique d'appel d'un programme d'exécution.Vous devriez également regarder gprof2dot qui rend un fichier DOT hors d'un appel GPROF «graphique» .C'est gratuit et OK

Et je devrais également ajouter, même si c'est pas quelque chose que j'ai jamais utilisé, que Callgrind peut être utile

+0

Merci pour la réponse. Oui, Comprendre pour Fortran semble être le chemin à parcourir. – EMiller

20

Je recommande doxygen, qui génère automatiquement la documentation ion du code source (et est libre). Habituellement, vous ajoutez un balisage aux commentaires décrivant vos fonctions et variables. Cependant, vous pouvez simplement exécuter doxygen sur des fichiers source non documentés, à condition de définir EXTRACT_ALL à YES dans le fichier de configuration et de créer des diagrammes de relation de création pour toutes vos fonctions (par exemple, cette fonction appelle ces fonctions et est appelée par ces autres fonctions).

GraphViz doit être installé pour que les diagrammes soient générés et l'option HAVE_DOT doit être définie sur YES dans le fichier de configuration. Voir la documentation doxygen pour graphs and diagrams pour plus d'informations et example class documentation pour un exemple de la sortie générée.

Modifier: Bien sûr, pour Fortran vous devez définir l'option OPTIMIZE_FOR_FORTRAN-YES dans le fichier de configuration.

+0

Cette méthode a fonctionné pour moi en utilisant les paquets Ubuntu disponibles pour 'doxygen' et' graphviz'. Les options auxquelles Chris fait référence se trouvent dans le fichier de configuration 'Doxyfile'. – ryanjdillon

+1

Il ya aussi un programme 'doxywizard' dans le paquet' doxygen-ui' qui rend les choses assez simples – naught101

+0

J'ai essayé les deux, doxygen et Comprendre, et je dois dire que le doxygen fait un travail génial. Dans le fichier de configuration, j'utilise: HAVE_DOT = YES, CALL_GRAPH = YES, CALLER_GRAPH = YES, et enfin EXTRACT_ALL = YES pour inclure * tous * les fichiers Fortran dans les sous-répertoires. – netzpurist

1

Vous pouvez utiliser callgrind à l'intérieur Valgrind:

valgrind --tool=callgrind [your program] 

Cela produira un fichier callgrind.out.[pid]. Cela fonctionne mieux si vous compilez votre programme sans optimisation et avec les indicateurs de débogage.

Vous avez alors deux options pour l'affichage des données:

  1. Convertir la sortie callgrind vers un fichier .dot avec grof2dot, puis affichez avec xdot, ou le convertir en un graphique statique avec GraphViz .
  2. Voir directement avec Kcachegrind (inclut l'analyse de la source et les graphiques d'appel).