varias una titulo superponer sirve que punto para marcar graficas graficar grafica comandos comando matlab dependencies code-analysis call-graph

una - Generación de gráficos de llamada desde el código src de matlab



titulo grafica matlab (4)

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

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

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

p contiene el historial de funciones, de esa misma página de ayuda que he vinculado anteriormente:

Los datos del historial describen la secuencia de funciones ingresadas y salidas durante la ejecución. El comando de 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 salida de una función. La segunda fila identifica la función que ingresa o sale de 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 es necesario que muestre las llamadas de entrada y salida como en el ejemplo anterior; solo mirando p.FunctionTable y p.FunctionHistory será suficiente para mostrar cuando el código entra y sale de las funciones.

Estoy tratando de crear un gráfico de llamadas de función 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.

¿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.


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.


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

  • Encuentra dependencias entre funciones y genera un gráfico de dependencia (usando la herramienta de puntos de GraphViz)
  • Referencia cruzada automática de funciones y subfunciones con su definición en el código fuente

Consulte esta página de demostración para ver un ejemplo del resultado de esta herramienta.


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

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

Pero tuve mejor suerte exportando 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'')