从matlab src代码生成调用图

Vij*_*jay 14 matlab dependencies code-analysis call-graph

我正在尝试为大约500个matlab src文件创建一个函数调用图.我无法找到任何可以帮助我对多个src文件执行相同操作的工具.

有人熟悉任何工具或插件吗?

如果没有任何此类工具,欢迎任何有关阅读6000行matlab代码而无需文档的建议.

Amr*_*mro 11

让我建议M2HTML,一个自动生成MATLAB m文件的HTML文档的工具.其功能列表中:

  • 查找函数之间的依赖关系并生成依赖关系图(使用GraphViz的点工具)
  • 功能和子功能的自动交叉引用及其在源代码中的定义

查看此演示页面以查看此工具输出的示例.


Bob*_*ore 9

我建议使用该depfun函数构建一个调用图.有关更多信息,请访问http://www.mathworks.com/help/techdoc/ref/depfun.html.

特别是,我发现depfun'-toponly'参数调用,然后迭代结果,是手工构建调用图的一种很好的方法.不幸的是,我无法访问使用此编写的任何代码.


Dan*_*hoa 5

我认为你的意思是你想要确切地看到你的代码是如何运行的 - 什么函数可以调用哪些子函数,何时以及运行的时间长短?

看看MATLAB Code Profiler.按如下方式执行代码:

>> profile on -history; MyCode; profile viewer
>> p = profile('info');
Run Code Online (Sandbox Code Playgroud)

p 包含功能历史记录,从我上面链接的相同帮助页面:

历史数据描述了在执行期间输入和退出的功能序列.该profile命令返回FunctionHistory它返回的结构字段中的历史数据.历史数据是2×n阵列.第一行包含布尔值,其中0表示进入函数并1意味着退出函数.第二行标识其索引在FunctionTable字段中输入或退出的函数.此示例[下面]读取历史数据并将其显示在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
Run Code Online (Sandbox Code Playgroud)

您不一定需要像上面的示例那样显示入口和出口呼叫; 只需查看p.FunctionTablep.FunctionHistory足以显示代码何时进入和退出功能.