Генерация графа вызова из кода matlab src
Я пытаюсь создать граф вызовов функций для около 500 файлов matlab src. Я не могу найти какие-либо инструменты, которые могли бы помочь мне сделать то же самое для нескольких файлов src.
Кто-нибудь знаком с любыми инструментами или плагинами?
Если такие инструменты недоступны, любые предложения по чтению 6000 строк кода matlab
без документации приветствуется.
Ответы
Ответ 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')