2010-07-01 13 views
15

Sono stato gettato in un grande progetto Fortran con un gran numero di file sorgente.Come posso visualizzare il codice sorgente Fortran (90 o successivo), ad es. usando Graphviz?

Ho bisogno di contribuire a questo progetto e sembrerebbe prudente che capisca prima la fonte.

Come primo passo, vorrei visualizzare le interdipendenze tra i vari file di origine, vale a dire quali file di origine necessitano di quali moduli. Per quanto posso dire, esistono metodi automatizzati per altre lingue e producono un grafico che può essere costruito utilizzando Graphviz.

Ma qualcuno è a conoscenza del software là fuori che può fare questo per il codice Fortran 90?

[Ricerca interwebs di aiuto Fortran è un vero e proprio dolore come si finisce per cercare l'Inter-ragnatele grazie alla FORTRAN dolorosamente onnipresente 77.]

risposta

9

Se hai i soldi allora Understand for Fortran vale la pena guardare. Se non si dispone di denaro ma si intende lavorare rapidamente, è possibile ottenere un download di prova del software.

Per un grafico di chiamata statico, non ho mai trovato uno strumento gratuito utile come Comprendere; è difficile trovare strumenti gratuiti e tanto meno utile. Ne scriverò uno io stesso, ma il mercato sarebbe piccolo :-(

Per un grafico di chiamata dinamico esaminare le opzioni del compilatore.Usisco il compilatore Intel Fortran che può generare un tumulo di informazioni utili su un programma in esecuzione. debugger può anche visualizzare il grafo della chiamata di un programma in esecuzione.Anche si dovrebbe guardare gprof2dot che rende un file DOT fuori da un grafo di chiamata GPROF.Questo è gratuito e OK

E dovrei anche aggiungere, anche se è non è qualcosa che ho mai usato, che Callgrind può essere utile

+0

Grazie per la risposta. Sì, Capire per Fortran sembra essere la strada da percorrere. – EMiller

20

Io suggerirei doxygen, che genera automaticamente documentat ione dal codice sorgente (ed è gratuito). Solitamente si aggiunge del markup ai commenti che descrivono funzioni e variabili. Tuttavia, è possibile eseguire doxygen su file di origine non documentati, a condizione di impostare EXTRACT_ALL su YES nel file di configurazione e creare diagrammi di relazione per tutte le funzioni (ad esempio questa funzione chiama queste funzioni e viene chiamata da queste altre funzioni).

È necessario GraphViz installato per ottenere i diagrammi generati e l'opzione HAVE_DOT impostata su YES nel file di configurazione.

Vedere la documentazione doxygen per graphs and diagrams per ulteriori informazioni e questo example class documentation per un esempio dell'output generato.

Edit: Naturalmente per Fortran si dovrebbe impostare l'opzione OPTIMIZE_FOR_FORTRAN-YES nel file di configurazione.

+0

Questo metodo ha funzionato per me utilizzando i pacchetti disponibili di Ubuntu per 'doxygen' e' graphviz'. Le opzioni a cui si riferisce Chris si trovano nel file di configurazione 'Doxyfile'. – ryanjdillon

+1

C'è anche un programma 'doxywizard' nel pacchetto' doxygen-ui' che semplifica le cose – naught101

+0

Ho provato entrambi, doxygen e Understand, e devo dire che doxygen fa un lavoro fantastico. Nel file di configurazione utilizzo: HAVE_DOT = YES, CALL_GRAPH = YES, CALLER_GRAPH = YES e infine EXTRACT_ALL = YES per includere * tutti * i file Fortran nelle sottodirectory. – netzpurist

1

È possibile utilizzare callgrind dall'interno Valgrind:

valgrind --tool=callgrind [your program] 

Questo produrrà un file callgrind.out.[pid]. Funziona meglio se si compila il programma senza ottimizzazioni e con i flag di debug.

Allora avete un paio di opzioni per la visualizzazione dei dati:

  1. convertire l'uscita callgrind in un file .dot con grof2dot, e quindi visualizzare con xdot, o convertirlo in un grafico statico con GraphViz .
  2. Visualizza direttamente con Kcachegrind (include analisi di origine e grafici delle chiamate).
Problemi correlati