2011-09-14 18 views
12

Sto provando a creare un grafico di chiamata funzione per circa 500 file MATLAB SRC. Non riesco a trovare alcuno strumento che possa aiutarmi a fare lo stesso per più file src.Generazione del grafico di chiamata dal codice src matlab

Qualcuno ha familiarità con strumenti o plug-in?

Nel caso in cui tali strumenti non siano disponibili, qualsiasi suggerimento sulla lettura di 6000 righe di codice MATLAB senza documentazione è il benvenuto.

risposta

11

Lasciami suggerire M2HTML, uno strumento per generare automaticamente la documentazione HTML dei tuoi m-file MATLAB. Tra i suoi elenco di funzionalità:

  • Finds le dipendenze tra le funzioni e genera un grafico delle dipendenze (utilizzando lo strumento di punti di GraphViz)
  • automatico controllo incrociato delle funzioni e sottofunzioni con la loro definizione nel codice sorgente

Controlla questa pagina demo per vedere un esempio dell'output di questo strumento.

+0

l'aiuto da mdot g ives questo esempio: mdot ('m2html.mat', 'm2html.dot'); ! Dot -Tps m2html.dot -o m2html.ps ! Neato -Tps m2html.dot -o m2html.ps –

5

Prendo questo intendi che vuoi vedere esattamente come funziona il tuo codice - quali funzioni chiamano quali funzioni secondarie, quando e per quanto tempo vengono eseguite?

Dai uno sguardo allo MATLAB Code Profiler. Eseguire il codice come segue:

>> profile on -history; MyCode; profile viewer 
>> p = profile('info'); 

p contiene la storia funzioni, da quella stessa pagina di aiuto ho linkato sopra:

I dati storia descrive la sequenza delle funzioni inseriti ed è uscito durante l'esecuzione. Il comando profile restituisce i dati della cronologia nel campo FunctionHistory della struttura restituita. I dati della cronologia sono un array 2-by-n. La prima riga contiene valori booleani, dove 0 significa ingresso in una funzione e 1 significa uscita da una funzione. La seconda riga identifica la funzione inserita o chiusa dal relativo indice nel campo FunctionTable. Questo esempio [in basso] legge i dati della cronologia e li visualizza nella finestra di comando MATLAB.

profile on -history 
plot(magic(4)); 
p = profile('info'); 

for n = 1:size(p.FunctionHistory,2) 
if p.FunctionHistory(1,n)==0 
     str = 'entering function: '; 
else 
     str = 'exiting function: '; 
end 
disp([str p.FunctionTable(p.FunctionHistory(2,n)).FunctionName]) 
end 

Non è necessariamente bisogno di visualizzare l'ingresso e l'uscita chiama come l'esempio di cui sopra; solo guardando p.FunctionTable e p.FunctionHistory sarà sufficiente mostrare quando il codice entra ed esce dalle funzioni.

9

Si consiglia di utilizzare la funzione depfun per creare un grafico di chiamata. Vedere http://www.mathworks.com/help/techdoc/ref/depfun.html per ulteriori informazioni.

In particolare, ho trovato che chiamare depfun con l'argomento '-toponly', quindi iterare sui risultati, è un modo eccellente per costruire manualmente un grafico di chiamata. Sfortunatamente, non ho più accesso a nessuno dei codici che ho scritto usando questo.

0

Sono d'accordo con la risposta m2html, volevo solo dire quanto segue l'esempio del m2html/documentazione mdot è buono:

mdot('m2html.mat','m2html.dot'); 
!dot -Tps m2html.dot -o m2html.ps 
!neato -Tps m2html.dot -o m2html.ps 

Ma ho avuto migliore fortuna con l'esportazione in PDF:

mdot('m2html.mat','m2html.dot'); 
!dot -Tpdf m2html.dot -o m2html.pdf 

Inoltre, prima di provare i comandi di cui sopra è necessario rilasciare qualcosa di simile al seguente:

m2html('mfiles','..\some\dir\with\code\','htmldir','doc_dir','graph','on') 
Problemi correlati