PUDGB - Pascal Units Dependency Graph Builder

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

PUDGB - Pascal Units Dependency Graph Builder

Сообщение zub » 06.04.2017 08:37:38

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
Циферка у линии связи - сколько циклов останется если эту связь убрать (т.е. нужно стараться уйти от зависимостей где циферка поменьше)
Вложения
2.png
Последний раз редактировалось zub 18.11.2020 07:40:28, всего редактировалось 4 раз(а).
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение ogorodov » 06.04.2017 12:22:55

zub у тебя в SVN passrcerrors.pas нехватает ... по сути должна быль полезная весчь
я так понимаю zcad с порядок приводиш ... :-)
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

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

Сообщение zub » 06.04.2017 13:17:50

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

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

Сообщение dedm0zaj » 06.04.2017 16:19:42

в лазаре есть что то подобное, но очень мелкое

зы ну и паутина у меня
Вложения
laz.png
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

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

Сообщение zub » 06.04.2017 18:41:49

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

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.

В тоже время, в других местах где точно такое же подключение ресурсов все нормально.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение zub » 11.04.2017 18:04:45

Директивой {$I} я не рулю, то что $i подхватывается внутри fcl-passrc. эти lrs точно находятся по указаным путям? пути настраивались руками или импортировались из lpi?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение Лекс Айрин » 11.04.2017 18:22:29

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

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

ЗЫ: странно, что при анализе разделов uses требуется правильно подключать ресурсы... тем более, что модули ресурсов программа как раз "не видит".. Я, конечно, не критикую,.. просто непонятка.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение zub » 11.04.2017 18:32:43

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

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

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

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение Лекс Айрин » 11.04.2017 18:44:09

zub писал(а): Я использую только то что в усес,


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

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


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

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

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

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


импортирую, конечно... вбивать что-то руками, если есть автоопределение моветон-с.
В общем, я вначале попробую причесать ресурсы, а потом смотреть дальше.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение zub » 11.04.2017 19:02:20

>>Все не найденные модули подключаются только через 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 собака яндекс точка ру
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение Лекс Айрин » 11.04.2017 19:06:04

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


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

Добавлено спустя 3 минуты 2 секунды:
кстати, да, они, почему-то, лежат в папке lib/i386-win32
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение zub » 11.04.2017 19:22:20

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

Добавлю импорт целевых настроек как появится время
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение Лекс Айрин » 11.04.2017 19:40:46

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


Если честно, у меня не получилось скомпилировать твою прогу цивильным путем... боюсь, файл проекта испорчен. Т. е. я может и настрою все под себя, но не факт, что имеет смысл делать фиксацию. Да и скомпилировал я вне рабочего каталога.
Боюсь, в следующий раз мне проще будет отделить ее в полностью независимый проект.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: PUDGB - Pascal Units Dependency Graph Builder

Сообщение zub » 11.04.2017 20:08:17

>>Если честно, не вижу смысла держать формы в том каталоге...
это автоматически генерируемый файл, так что логично

>>Если честно, у меня не получилось скомпилировать твою прогу цивильным путем..
ниче ненадо перекомпилировать. надо вместо linux вбить win32
см. приложеную картинку
Вложения
Снимок.PNG
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru