Подтвердить что ты не робот

Автоматическая генерация диаграммы вызовов функций в MATLAB

Кто-нибудь знает инструмент, который можно использовать для автоматического построения диаграмм функций вызовов функций в MATLAB?

например. Для данной функции инструмент будет рекурсивно проходить вызовы функций и строить 2D-граф, где узлы будут представлять функции, а направленные ребра будут связывать вызывающие функции с вызываемыми функциями.

В идеале инструмент может позволить пользователю включать и выключать фильтры только для включения пользовательских функций, ограничения глубины рекурсии и т.д.

Я верю, что Doxygen предоставляет некоторые аналогичные функции для более традиционных OOP языков, но мне было интересно если что-то подобное уже существует для MATLAB.

Спасибо!

4b9b3361

Ответ 1

Вы можете использовать методы из тех других ответов, на которые ссылается комментарий gnovice, чтобы получить список зависимостей функций как (A, B) пар, где A вызывает B. Затем установите GraphViz и использовать его для создания диаграмм. Вы можете создать .dot файлы из Matlab с чем-то вроде этого.

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 отлично работает для множества других приложений дерева и графа, таких как наследование классов и деревьев зависимостей, поток данных и т.д.