PUDGB - Pascal Units Dependency Graph Builder

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

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

zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

PUDGB - Pascal Units Dependency Graph Builder

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

Сообщение ogorodov »

zub у тебя в SVN passrcerrors.pas нехватает ... по сути должна быль полезная весчь
я так понимаю zcad с порядок приводиш ... :-)
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Добавил. Но он по большому счету ненужен - использовал его для написанья репортов на passrc - для быстрого воспроизведения ошибок.
Вещь очень полезная на очень больших проектах с непродуманой структурой, на маленьких в принципе хватит головы. "Переплетение" в левой части картинки в голове представить очень трудно))
dedm0zaj
постоялец
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

Сообщение dedm0zaj »

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

зы ну и паутина у меня
Вложения
laz.png
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

То что есть в лазаре - видел, очень трудно для понимания - имхо вообще бесполезно.
Ну и фишка не в общей паутине (то что получается после нажатия на save), а в вычленении из общего проблемных мест - то что после нажатия на scan.
У вас зацикленностей нет, так нет implementation uses (они пунктиром поумолчанию). Моя картинка в первом посте это именно циклы выдраные из общей паутины >200 юнитов
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Не составляет полную схему из-за ошибок типа:

Код: Выделить всё

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.

В тоже время, в других местах где точно такое же подключение ресурсов все нормально.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Директивой {$I} я не рулю, то что $i подхватывается внутри fcl-passrc. эти lrs точно находятся по указаным путям? пути настраивались руками или импортировались из lpi?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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

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

ЗЫ: странно, что при анализе разделов uses требуется правильно подключать ресурсы... тем более, что модули ресурсов программа как раз "не видит".. Я, конечно, не критикую,.. просто непонятка.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

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

Добавлено спустя 1 минуту 12 секунд:
>>zub, я уже не помню какие пути настраивались ручками, но программа собирается... т. е. ресурсы она видит.
я имею ввиду пути в pudgb - их вбиваешь руками или импортируешь из файла проекта?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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


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

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


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

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

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

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


импортирую, конечно... вбивать что-то руками, если есть автоопределение моветон-с.
В общем, я вначале попробую причесать ресурсы, а потом смотреть дальше.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение 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 собака яндекс точка ру
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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


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

Добавлено спустя 3 минуты 2 секунды:
кстати, да, они, почему-то, лежат в папке lib/i386-win32
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

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

Сообщение Лекс Айрин »

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


Если честно, у меня не получилось скомпилировать твою прогу цивильным путем... боюсь, файл проекта испорчен. Т. е. я может и настрою все под себя, но не факт, что имеет смысл делать фиксацию. Да и скомпилировал я вне рабочего каталога.
Боюсь, в следующий раз мне проще будет отделить ее в полностью независимый проект.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

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