Call graph generation from matlab src code
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 theFunctionHistory
field of the structure it returns. The history data is a 2-by-n array. The first row contains Boolean values, where0
means entrance into a function and1
means exit from a function. The second row identifies the function being entered or exited by its index in theFunctionTable
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.
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.
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.