Как я могу сгенерировать список функциональных зависимостей в MATLAB?
-
01-07-2019 - |
Вопрос
Чтобы распространить написанную мной функцию, которая зависит от других написанных мной функций, которые имеют свои собственные зависимости и так далее, не распространяя каждый m-файл, который я когда-либо писал, мне нужно выяснить, каков полный список зависимостей для данного m-файла.Есть ли встроенный / свободно загружаемый способ сделать это?
В частности, меня интересуют решения для MATLAB 7.4.0 (R2007a), но если есть другой способ сделать это в более старых версиях, обязательно добавьте их сюда.
Решение
Для более новых версий Matlab (например, 2007 или 2008) вы могли бы использовать встроенные функции:
- млинт
- отчет о зависимостях и
- отчет о покрытии
Другой вариант - использовать профилировщик Matlab.Команда называется profile, ее также можно использовать для отслеживания зависимостей.Чтобы использовать profile, вы могли бы сделать
>> profile on % turn profiling on
>> foo; % entry point to your matlab function or script
>> profile off % turn profiling off
>> profview % view the report
Если профилировщик недоступен, то, возможно, следующие две функции (для версии до MATLAB 2015a):
- депфан
- депдир
Например,
>> deps = depfun('foo');
предоставляет структуру deps, которая содержит все зависимости foo.m.
Из ответов 2, и 3, более новые версии MATLAB (после 2015a) используют matlab.codetools.requiredFilesAndProducts
вместо этого.
Смотрите ответы
Редактировать:
Предостережения благодаря комментариям @Mike Katz
Помните, что профилировщик будет показывать вам только файлы, которые фактически использовались в этих запусках, поэтому, если вы не пройдетесь по каждой ветке, у вас могут возникнуть дополнительные зависимости. Отчет о зависимостях - хороший инструмент, но разрешает статические зависимости только от пути и только для файлов в одном каталоге.
Depfun более надежен, но предоставляет вам все возможные возможности, о которых он может подумать, и по-прежнему пропускает LOAD и EVAL.
Другие советы
Для MATLAB 2015a
и позже вам желательно взглянуть на matlab.codetools.Требуемые файлы и продукты
или doc matlab.codetools.requiredFilesAndProducts
потому что depfun
помечен как подлежащий удалению в будущей версии.