在MATLAB中自动生成函数调用图

时间:2011-04-01 19:58:09

标签: matlab dependencies code-analysis diagram

有人知道可以用来在MATLAB中自动构建diagrams函数调用的工具吗?

E.g。对于给定的函数,该工具将递归地通过函数调用并构建2D图,其中节点将表示函数,并且有向边将调用函数与被调用函数连接。

理想情况下,该工具可以允许用户打开和关闭过滤器,仅包含用户定义的函数,限制递归的深度等。

我相信Doxygen为更传统的OOP语言提供了一些类似的功能,但我想知道MATLAB是否已存在类似的内容。

谢谢!

1 个答案:

答案 0 :(得分:24)

您可以使用gnovice注释中引用的其他答案中的技术来获取函数依赖关系列表作为(A,B)对,其中A调用B.然后安装GraphViz并使用它来生成图表。您可以使用类似的东西从Matlab创建.dot文件。

function createFunctionDependencyDotFile(calls)
%CREATEFUNCTIONDEPENDENCYDOTFILE Create a GraphViz DOT diagram file from function call list
%
% Calls (cellstr) is an n-by-2 cell array in format {caller,callee;...}.
%
% Example:
% calls = { 'foo','X'; 'bar','Y'; 'foo','Z'; 'foo','bar'; 'bar','bar'};
% createFunctionDependencyDotFile(calls)

baseName = 'functionCalls';
dotFile = [baseName '.dot'];
fid = fopen(dotFile, 'w');
fprintf(fid, 'digraph G {\n');
for i = 1:size(calls,1)
    [parent,child] = calls{i,:};
    fprintf(fid, '   "%s" -> "%s"\n', parent, child);
end
fprintf(fid, '}\n');
fclose(fid);

% Render to image
imageFile = [baseName '.png'];
% Assumes the GraphViz bin dir is on the path; if not, use full path to dot.exe
cmd = sprintf('dot -Tpng -Gsize="2,2" "%s" -o"%s"', dotFile, imageFile);
system(cmd);
fprintf('Wrote to %s\n', imageFile);

enter image description here

GraphViz适用于许多其他树和图形应用程序,如类继承和依赖树,数据流等。