Pull to refresh

Иерархия классов C++ на коленке

Reading time2 min
Views1.8K

Предисловие


Как при помощи awk, tiddlywiki и такой-то матери разобраться в структуре классов, которые вы видите первый раз, а сделать что-то надо ещё вчера.
Внимание: использование данного метода очень ограниченное, к тому же в нормальных средах разработки этот приём и не нужен. Но у меня был проект на C++ в BCB6, так что пришлось делать самому.

Что имеем


Набор классов, порядка 150 штук. В процессе разработки системы имена у части из них поменялись, а названия файлов остались прежние. И сразу выяснить, кто-кому родственник не представляется возможным. Есть Class Explorer — но он не информативен, а самое главное, невозможно выяснить какие именно классы наследуются от данного.

Что требуется для выполнения анализа

(предполагается, что мы проводим изыскания в Windows)

  • AWK/GAWK
  • браузер, умеющий работать с TW (Firefox, Opera, IE)


К несчастью команда for в командном интерпретаторе Windows не работает с вложенными каталогами (да, я знаю про /R, но for возвращает абсолютный путь с обратными слешами, который потом нужно потом разворачивать, а мне пока лениво), поэтому можем обработать только один каталог. Но если под рукой есть bin-utils и win-bash то простым переименование bin/find в bin/gfind можно будет использовать и версию для bash. Для *nix систем используется файл с соответствующим именем.

Анализ

по пунктам

  1. Скачиваем архив — в нём модифицированный TW, скрипты bat, sh, awk
  2. Распаковываем
  3. В папку src складываем файлы для анализа (пока я анализирую только *.h).
  4. Если нужно — скачиваем GAWK for Windows
  5. После чего запускаем нужный скрипт и после его окончания работы открываем в браузере classes.html


Что получаем на выходе


Теги:

  • 2explain — записи для «расшифровки» (записи полученные в результате обработки исходников)
  • base_class — классы от которых наследуются
  • теги с именами классов от которых наследуются


Записи вида

TFilterStateKeeper
File ./uFilter.h
Parent TStateKeeper


Глоссарий



TW — TiddlyWiki
BCB — Borland C++ Builder (строитель скучных земель, страшная среда разработки, которая ещё застала отсутствие свёртывания кода и рефакторинг кода)
AWK/GAWK — интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам. GAWK — это GNU версия, с различными улучшениями.

Модификация TW заключается исключительно в разделении JavaScript и собственно страницы с данными — на результатах работы это не сказывается, но становится проще модифицировать и отлаживать.

Пример: classes.html (Не забудьте разрешить скрипты). На этом примере видно, что работает «парсер» не идеально («классы» that и to).
Да можно (и нужно) использовать doxygen. Но в нём нет поиска с использованием регулярных выражений, и нельзя быстро сделать и сохранить пометки. А самое главное — в нём нет анимации! :)
Tags:
Hubs:
+9
Comments0

Articles