Automatyczne generowanie diagramu wywołań funkcji w MATLAB [zamknięty]

zamknięte. to pytanie nie spełnia wytycznych dotyczących przepełnienia stosu . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Update the pytanie więc to on-topic {[3] } dla przepełnienia stosu.

Zamknięte 6 lat temu .

Popraw to pytanie

Ktoś zna narzędzie, które może być użyte do automatycznego budowania diagramów wywołań funkcji w Matlabie?

Np. dla danej funkcji narzędzie będzie rekurencyjnie poprzez wywołania funkcji i zbudowanie wykresu 2D, gdzie węzły reprezentowałyby funkcje, a kierowane krawędzie łączyłyby funkcje wywołujące z wywołanymi funkcjami.

Najlepiej byłoby, gdyby narzędzie pozwalało użytkownikowi włączać i wyłączać filtry, aby zawierały tylko funkcje zdefiniowane przez użytkownika, ograniczały głębokość rekursji itp.

Uważam, że Doxygen zapewnia podobną funkcjonalność dla bardziej tradycyjnych OOP języków, ale zastanawiałem się, czy coś takiego istnieje już dla MATLAB.

Dzięki!
Author: Amro, 2011-04-01

1 answers

Możesz użyć technik z innych odpowiedzi przywołanych w komentarzu gnovica, aby uzyskać listę zależności funkcji jako pary (A,B), gdzie a wywołuje B. następnie zainstaluj GraphViz i użyj go do generowania diagramów. Możesz stworzyć .pliki dot z Matlab z czymś takim.

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);

Tutaj wpisz opis obrazka

GraphViz działa świetnie dla wielu innych aplikacji drzew i wykresów, takich jak dziedziczenie klas i drzewa zależności, przepływ danych i tak dalej.

 27
Author: Andrew Janke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-01 22:15:04