2011-09-14 13 views
12

Estoy tratando de crear un gráfico de llamadas a funciones para alrededor de 500 archivos de matlab src. No puedo encontrar ninguna herramienta que pueda ayudarme a hacer lo mismo para múltiples archivos src.Generación de gráficos de llamada desde el código src de matlab

¿Alguien está familiarizado con alguna herramienta o complemento?

En caso de que tales herramientas no estén disponibles, cualquier sugerencia sobre la lectura de 6000 líneas de código matlab sin documentación es bienvenida.

Respuesta

11

Déjenme sugerir M2HTML, una herramienta para generar automáticamente la documentación HTML de sus m-archivos MATLAB. Entre su lista de características:

  • Finds dependencias entre las funciones y genera un gráfico de dependencia (con la función de punto de GraphViz)
  • referencia cruzada automática de funciones y subfunciones con su definición en el código fuente

Consulte esta página demo para ver un ejemplo del resultado de esta herramienta.

+0

la ayuda de mdot g Este ejemplo es el siguiente: mdot ('m2html.mat', 'm2html.dot'); ! Dot-TPS m2html.dot -o m2html.ps ! Neato-TPS m2html.dot -o m2html.ps –

5

Supongo que quiere ver exactamente cómo se está ejecutando su código: ¿qué funciones llaman qué subfunciones, cuándo y cuánto duran esas ejecuciones?

Eche un vistazo a MATLAB Code Profiler. Ejecutar el código de la siguiente manera:

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

p contiene el historial de funciones, desde la misma página de ayuda he vinculado anteriormente:

Los datos de la historia describe la secuencia de las funciones entraba y salía durante la ejecución. El comando profile devuelve datos de historial en el campo FunctionHistory de la estructura que devuelve. Los datos del historial son una matriz de 2 por n. La primera fila contiene valores booleanos, donde 0 significa entrada a una función y 1 significa salir de una función. La segunda fila identifica la función introducida o saliente por su índice en el campo FunctionTable. Este ejemplo [a continuación] lee los datos del historial y los muestra en la ventana de comandos de 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 

No necesariamente tienen que mostrar la entrada y salida de llamadas como el ejemplo anterior; solo mirando p.FunctionTable y p.FunctionHistory será suficiente para mostrar cuando el código ingresa y sale de las funciones.

9

Recomiendo examinar el uso de la función depfun para construir un gráfico de llamadas. Consulte http://www.mathworks.com/help/techdoc/ref/depfun.html para obtener más información.

En particular, he encontrado que llamar a depfun con el argumento '-toponly', y luego iterar sobre los resultados, es una forma excelente de construir un gráfico de llamadas a mano. Desafortunadamente, ya no tengo acceso a ninguno de los códigos que he escrito al usar esto.

0

Estoy de acuerdo con la respuesta m2html, yo sólo quería decir lo siguiente el ejemplo de la documentación m2html/mdot es buena:

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

pero tenía mejor suerte con la exportación a PDF:

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

Además, antes de probar los comandos anteriores debe emitir algo como lo siguiente:

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