MATLAB中自动生成函数调用图的方法

18

有没有工具可以自动构建MATLAB中函数调用的图表

例如,对于给定的函数,该工具将递归地遍历函数调用,并构建一个二维图形,其中节点代表函数,有向边将调用函数与被调用函数连接。

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

我相信Doxygen为更传统的OOP语言提供了类似的功能,但我想知道是否已经存在类似于MATLAB的东西。

谢谢!


6
我不知道有什么工具可以创建这个“图表”,但已经有一些关于如何在MATLAB中查找函数依赖的问题,(它们的输出可能被用于创建图形表示):如何在MATLAB中生成函数依赖列表?MATLAB:从“命令行”确定依赖项,排除内置依赖项MATLAB:如何找到使用给定函数的路径上的函数 - gnovice
3
如我在这里所提到的,你可以使用M2HTML工具箱(实际上它也使用GraphViz来生成调用图)。 - Amro
1个回答

27

你可以使用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);

在此输入图像描述

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


+1 是因为你向我介绍了 GraphViz。感谢提供链接! - b3.
提供一个直观的例子,加1! - Amelio Vazquez-Reina
1
这可能会有所帮助,https://www.mathworks.com/matlabcentral/fileexchange/27608-graphviz-like-tools-for-matlab - KAE
GraphViz适用于Octave吗?还是有类似的其他工具? - Ziezi
当然。GraphViz是一个外部程序。Matlab代码所做的一切都是生成一个文本文件,其中包含一个“DOT”格式文档供GraphViz读取。如果您可以在Octave中获取函数依赖数据,则可以以相同的方式生成DOT文件。 - Andrew Janke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接