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

Генерация графа вызова из кода matlab src

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

Кто-нибудь знаком с любыми инструментами или плагинами?

Если такие инструменты недоступны, любые предложения по чтению 6000 строк кода matlab без документации приветствуется.

4b9b3361

Ответ 1

Позвольте мне предложить M2HTML - инструмент для автоматической генерации HTML-документации ваших m файлов MATLAB. Среди его списка функций:

  • Поиск зависимостей между функциями и генерирует граф зависимостей (с использованием точечного инструмента GraphViz)
  • Автоматическая перекрестная ссылка функций и подфункций с их определением в исходном коде

Просмотрите эту страницу demo, чтобы увидеть пример вывода этого инструмента.

Ответ 2

Я рекомендую изучить функцию depfun для построения графика вызовов. Подробнее см. http://www.mathworks.com/help/techdoc/ref/depfun.html.

В частности, я обнаружил, что вызов depfun с аргументом '-toponly', а затем итерация результатов - отличный способ построить график вызовов вручную. К сожалению, у меня больше нет доступа к любому из кода, который я написал, используя это.

Ответ 3

Я так понимаю, вы хотите, чтобы вы точно знали, как работает ваш код - какие функции вызывают функции, когда и сколько времени они запускают?

Взгляните на MATLAB Code Profiler. Выполните код следующим образом:

>> profile on -history; MyCode; profile viewer
>> p = profile('info');

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

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

Ответ 4

Я согласен с ответом m2html, я просто хотел сказать, что следующий пример из документации m2html/mdot хорош:

mdot('m2html.mat','m2html.dot');
!dot -Tps m2html.dot -o m2html.ps
!neato -Tps m2html.dot -o m2html.ps

Но мне повезло с экспортом в pdf:

mdot('m2html.mat','m2html.dot');
!dot -Tpdf m2html.dot -o m2html.pdf

Кроме того, перед тем, как вы попробуете вышеуказанные команды, вы должны выпустить что-то вроде следующего:

m2html('mfiles','..\some\dir\with\code\','htmldir','doc_dir','graph','on')