Страница 1 из 3

PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 06.04.2017 08:37:38
zub
Pascal Units Dependency Graph Builder - вроде были такие мысли когда называл.
Топик выделил отсюда http://www.freepascal.ru/forum/viewtopi ... 5&start=30
Исходники https://github.com/zamtmn/pudgb
Понадобятся пакеты https://github.com/zamtmn/zcad/tree/mas ... tinspector и https://github.com/zamtmn/zcad/tree/mas ... /AGraphLaz

Бинарник https://github.com/zamtmn/pudgb/releases - под другие платформы придется собирать самостоятельно

Программа была написана чтобы навести порядок в одном большом проекте - избавиться от зацикленых зависимостей юнитов. Сканирует исходники проекта, строит полный граф зависимостей и граф "циклических" зависимостей. Полученные графы можно визуализировать в graphwiz или онлайн http://www.webgraphviz.com
Результат работы (формат dot) можно сконвертить для yEd (*.graphml) используя этот питон скрипт https://bitbucket.org/dirkbaechle/dottoxml или онже https://github.com/vivin/dottoxml
В качестве парсера исходников используется fcl-passrc из поставки fpc.
Для работы с графами (поиск зацикливаний) используется AGraph - древний, но очень дельный дельфовый пакет. С ним были некоторые трудности т.к. он не знал что бывает 64 бита и имел наколенную поддержку юникода написаную на асме (во раньше извращались :D ) Получилось его исправить и подружить с lin-x86_64 - создаю отдельный топик для программы.

Планов развивать - нет, только если совсем будет нечего делать


Результатр работы работы программы: в овалах имена юнитов_x_y
x - сколько юнитов подключено в interface uses
y - сколько юнитов подключено в implementation uses
Пунктирные связи из implementation uses, сплошные связи из interface uses
Циферка у линии связи - сколько циклов останется если эту связь убрать (т.е. нужно стараться уйти от зависимостей где циферка поменьше)

Re: PUDGB - угораздило же так назвать))

СообщениеДобавлено: 06.04.2017 12:22:55
ogorodov
zub у тебя в SVN passrcerrors.pas нехватает ... по сути должна быль полезная весчь
я так понимаю zcad с порядок приводиш ... :-)

Re: PUDGB - угораздило же так назвать))

СообщениеДобавлено: 06.04.2017 13:17:50
zub
Добавил. Но он по большому счету ненужен - использовал его для написанья репортов на passrc - для быстрого воспроизведения ошибок.
Вещь очень полезная на очень больших проектах с непродуманой структурой, на маленьких в принципе хватит головы. "Переплетение" в левой части картинки в голове представить очень трудно))

Re: PUDGB - угораздило же так назвать))

СообщениеДобавлено: 06.04.2017 16:19:42
dedm0zaj
в лазаре есть что то подобное, но очень мелкое

зы ну и паутина у меня

Re: PUDGB - угораздило же так назвать))

СообщениеДобавлено: 06.04.2017 18:41:49
zub
То что есть в лазаре - видел, очень трудно для понимания - имхо вообще бесполезно.
Ну и фишка не в общей паутине (то что получается после нажатия на save), а в вычленении из общего проблемных мест - то что после нажатия на scan.
У вас зацикленностей нет, так нет implementation uses (они пунктиром поумолчанию). Моя картинка в первом посте это именно циклы выдраные из общей паутины >200 юнитов

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 16:35:50
Лекс Айрин
Не составляет полную схему из-за ошибок типа:
Код: Выделить всё
Parser error: "Could not find include file 'edit.lrs'" line:0 column:0  file:D:\lexeditor\\Edit.pas
Parser error: "Could not find include file 'framefolder.lrs'" line:0 column:0  file:D:\lexeditor\\framefolder.pas

Если что, то ресурсы у меня включаются в разных местах и это связано с историческими причинами.
Конкретно в "ошибочных" файлах они в разделе initialization.

В тоже время, в других местах где точно такое же подключение ресурсов все нормально.

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 18:04:45
zub
Директивой {$I} я не рулю, то что $i подхватывается внутри fcl-passrc. эти lrs точно находятся по указаным путям? пути настраивались руками или импортировались из lpi?

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 18:22:29
Лекс Айрин
zub, я уже не помню какие пути настраивались ручками, но программа собирается... т. е. ресурсы она видит.

... Хм.... а в папке проекта этих файлов то действительно нету(((
Т. е. мне надо все ресурсы перевести в lrs и все заработает?

ЗЫ: странно, что при анализе разделов uses требуется правильно подключать ресурсы... тем более, что модули ресурсов программа как раз "не видит".. Я, конечно, не критикую,.. просто непонятка.

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 18:32:43
zub
>>ЗЫ: странно, что при анализе разделов uses требуется правильно подключать ресурсы...
fcl-passrc парсит всё полностью. это не настраивается - либо всё либо ничего. Строится полная модель исходников. Я использую только то что в усес, а можно например построить "блок схему" полностью всего.

>>... Хм.... а в папке проекта этих файлов то действительно нету(((
Я незнаю как там у тебя с путями, но они должны гдето быть - компилятор же их както находит.
Возможен вариант что их подключение внутри какого либо блока ifdef - компилятор их игнорирует, а парсер нет (он поддерживает ifdef, но они ему не заданы)

Добавлено спустя 1 минуту 12 секунд:
>>zub, я уже не помню какие пути настраивались ручками, но программа собирается... т. е. ресурсы она видит.
я имею ввиду пути в pudgb - их вбиваешь руками или импортируешь из файла проекта?

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 18:44:09
Лекс Айрин
zub писал(а): Я использую только то что в усес,


Все не найденные модули подключаются только через uses.

zub писал(а):Возможен вариант что их подключение внутри какого либо блока ifdef - компилятор их игнорирует, а парсер нет (он поддерживает ifdef, но они ему не заданы)


у меня нет подключения модулей программы в директивах условной компиляции. (апд...вообще, не найденные модули активно используются, так что компилятор их явно видит)

zub писал(а):Я незнаю как там у тебя с путями, но они должны гдето быть - компилятор же их както находит.

У меня часть ресурсов в одном формате, а часть в другом. Как-то так сложилось... с чем это связано уже не помню... кажется, с какими-то глюками в ресурсах. Вообще, пора уже папку с исходниками чистить... уже нахожу там то, что давно должен был удалить.

zub писал(а):я имею ввиду пути в pudgb - их вбиваешь руками или импортируешь из файла проекта?


импортирую, конечно... вбивать что-то руками, если есть автоопределение моветон-с.
В общем, я вначале попробую причесать ресурсы, а потом смотреть дальше.

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 19:02:20
zub
>>Все не найденные модули подключаются только через uses.
>>Parser error: "Could not find include file 'edit.lrs'" line:0 column:0 file:D:\lexeditor\\Edit.pas
Ты не понял, парсится Edit.pas, в нем обнаруживается {$I edit.lrs} и вот edit.lrs уже не находится. а компилятор его находит.
Кстати, может он в каталоге вывода проекта?

>>В общем, я вначале попробую причесать ресурсы, а потом смотреть дальше.
Если проект компилируется, он должен быть распарсен. вышли мне исходники в текущем состоянии zamtmn собака яндекс точка ру

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 19:06:04
Лекс Айрин
zub писал(а):Если проект компилируется, он должен быть распарсен. вышли мне исходники в текущем состоянии zamtmn собака яндекс точка ру


ок. Сейчас полностью заархивирую папку и вышлю.

Добавлено спустя 3 минуты 2 секунды:
кстати, да, они, почему-то, лежат в папке lib/i386-win32

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 19:22:20
zub
Попробуй добавь в настройках проекта $(ProjOutDir) в -Fi (Include files) если его там еще нет
зы. Похоже понял, у меня поумолчанию target os стоит linux а cpu стоит i386 и эти параметры из lpi не импортируются. соответственно лежат в lib\i386-win32 а ищутся в lib\i386-linux
Попробуй настроить target os в pugdb

Добавлю импорт целевых настроек как появится время

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 19:40:46
Лекс Айрин
ок. Если честно, не вижу смысла держать формы в том каталоге... так что как окажусь за тем компом, переделаю... ибо нефиг.
zub писал(а):Попробуй настроить target os в pugdb


Если честно, у меня не получилось скомпилировать твою прогу цивильным путем... боюсь, файл проекта испорчен. Т. е. я может и настрою все под себя, но не факт, что имеет смысл делать фиксацию. Да и скомпилировал я вне рабочего каталога.
Боюсь, в следующий раз мне проще будет отделить ее в полностью независимый проект.

Re: PUDGB - Pascal Units Dependency Graph Builder

СообщениеДобавлено: 11.04.2017 20:08:17
zub
>>Если честно, не вижу смысла держать формы в том каталоге...
это автоматически генерируемый файл, так что логично

>>Если честно, у меня не получилось скомпилировать твою прогу цивильным путем..
ниче ненадо перекомпилировать. надо вместо linux вбить win32
см. приложеную картинку