Call graph generation from matlab src code

核能气质少年 提交于 2019-12-03 19:05:04

问题


I am trying to create a function call graph for around 500 matlab src files. I am unable to find any tools which could help me do the same for multiple src files.

Is anyone familiar with any tools or plugins?

In case any such tools are not available, any suggestions on reading 6000 lines of matlab code without documentation is welcome.


回答1:


Let me suggest M2HTML, a tool to automatically generate HTML documentation of your MATLAB m-files. Among its feature list:

  • Finds dependencies between functions and generates a dependency graph (using the dot tool of GraphViz)
  • Automatic cross-referencing of functions and subfunctions with their definition in the source code

Check out this demo page to see an example of the output of this tool.




回答2:


I recommend looking into using the depfun function to construct a call graph. See http://www.mathworks.com/help/techdoc/ref/depfun.html for more information.

In particular, I've found that calling depfun with the '-toponly' argument, then iterating over the results, is an excellent way to construct a call graph by hand. Unfortunately, I no longer have access to any of the code that I've written using this.




回答3:


I take it you mean you want to see exactly how your code is running - what functions call what subfunctions, when, and how long those run for?

Take a look at the MATLAB Code Profiler. Execute your code as follows:

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

p contains the function history, From that same help page I linked above:

The history data describes the sequence of functions entered and exited during execution. The profile command returns history data in the FunctionHistory field of the structure it returns. The history data is a 2-by-n array. The first row contains Boolean values, where 0 means entrance into a function and 1 means exit from a function. The second row identifies the function being entered or exited by its index in the FunctionTable field. This example [below] reads the history data and displays it in the MATLAB Command Window.

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

You don't necessarily need to display the entrance and exit calls like the above example; just looking at p.FunctionTable and p.FunctionHistory will suffice to show when code enters and exits functions.




回答4:


I agree with the m2html answer, I just wanted to say the following the example from the m2html/mdot documentation is good:

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

But I had better luck with exporting to pdf:

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

Also, before you try the above commands you must issue something like the following:

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


来源:https://stackoverflow.com/questions/7421447/call-graph-generation-from-matlab-src-code

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!