Как я могу визуализировать исходный код Fortran (90 или новее), например. используя Graphviz?
Я был брошен в большой проект Fortran с большим количеством исходных файлов.
Мне нужно внести свой вклад в этот проект, и было бы разумным, чтобы я сначала понял источник.
В качестве первого шага я хотел бы визуализировать взаимозависимости между различными исходными файлами, то есть, какие исходные файлы нуждаются в таких модулях. Насколько я могу судить, автоматические методы существуют для других языков и приводят к графику, который может быть построен с использованием Graphviz.
Но кто-нибудь знает о программном обеспечении, которое может сделать это для кода Fortran 90?
[Поиск interwebs для помощи Fortran - настоящая боль, поскольку вы в конечном итоге просматриваете inter-паутину благодаря мучительно вездесущему FORTRAN 77.]
Ответы
Ответ 1
Если у вас есть деньги, то Понять для Fortran стоит посмотреть. Если у вас нет денег, но вы собираетесь работать быстро, вы можете пройти пробную загрузку программного обеспечения.
Для статического графика вызовов я никогда не нашел бесплатный инструмент как полезный, как понимать; трудно найти бесплатные инструменты, не говоря уже о полезном. Я бы написал сам, но рынок был бы крошечным: - (
Для динамического графика вызовов исследуйте параметры компилятора. Я использую компилятор Intel Fortran, который может генерировать кучу полезной информации о исполняющей программе. Отладчик TotalView также может визуализировать график вызовов исполняющей программы. Вы также должны посмотреть gprof2dot, из-за чего DOT файл вызывается из графика GPROF. Это бесплатно и хорошо.
И я должен добавить, хотя это не то, что я когда-либо использовал, что Callgrind может быть полезным.
Ответ 2
Я бы порекомендовал doxygen, который автоматически генерирует документацию из исходного кода (и является бесплатным). Обычно вы добавляете в комментарии некоторую разметку, описывающую ваши функции и переменные. Тем не менее, вы можете просто запустить doxygen для недокументированных исходных файлов, при условии, что вы установили EXTRACT_ALL
в YES
в файле конфигурации и попросите его создать диаграммы отношений для всех ваших функций (т.е. эта функция вызывает эти функции и вызывается этими другими функциями).
Вам нужно установить GraphViz для генерации диаграмм и установить для опции HAVE_DOT
значение YES
в файле конфигурации.
См. Документацию doxygen для графиков и диаграмм для получения дополнительной информации, а также к документации этого примера класса для примера сгенерированного вывода.
Изменить: Конечно, для Fortran вы должны установить опцию OPTIMIZE_FOR_FORTRAN
в YES
в файле конфигурации.
Ответ 3
Вы можете использовать callgrind
из Valgrind:
valgrind --tool=callgrind [your program]
Это приведет к созданию файла callgrind.out.[pid]
. Это лучше всего работает, если вы скомпилируете свою программу без оптимизаций и с флагами отладки.
Затем у вас есть пара опций для просмотра данных:
- Преобразуйте вывод callgrind в файл .dot с grof2dot, а затем просмотрите его с помощью xdot или преобразовать его в статический граф с помощью GraphViz.
- Посмотрите его напрямую с помощью Kcachegrind (включая анализ исходного кода и графики вызовов).