Инструменты для обратного проектирования C ++ (т.е. для просмотра классов C ++) - PullRequest
2 голосов
/ 29 ноября 2011

У меня есть большой объем рукописного исходного кода C ++ (т.е. WebKit и других открытых источников).

Я хочу инструмент, который будет:

  • Позвольте мне посмотретьотношения -класса для каждого и любого класса:
    • Связывающие отношения: т.е. какие другие классы содержат этот класс или содержатся в нем (файлы заголовков объявляют шаблоны шаблонных интеллектуальных указателей в качестве данных-членов)
    • Объявленные зависимости (т. Е. Использование типа в сигнатурах методов; хотя я вижу это довольно хорошо, используя 'find in files')
    • Иерархии подклассов и суперклассов
  • ВыполнениеWindows или Linux (или даже веб-решение)
  • Желательно иметь пользовательский интерфейс (или это слишком много, чтобы спросить?)
  • По желанию быть плагином в IDE

В отличие от смежного вопроса, C ++ to UML (Реверс-инжиниринг / Проектирование туда и обратно) , мне НЕ нужно:

  • Анализировать определения / реализацию (файлы cpp и c)
  • Поддержка редактированияили «циклическое отключение» источника

Вместо этого будет достаточно анализа объявлений типов в заголовках приложения и системы (включая типы шаблонов и определения типов).У меня есть списки всех заголовочных файлов.

Я бы предпочел, если бы он мог обрабатывать определения препроцессора (особенно #include и #if), но я могу выполнить предварительную обработку, если это необходимо;и / или предоставьте файлы make или project в различных форматах.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Вы всегда можете использовать doxygen, он даст вам полную документацию по вашему набору заголовков (наследование, использование, ...). Он также может генерировать графики из иерархии классов.

1 голос
/ 29 ноября 2011

другая возможность - настроить свой собственный инструмент путем расширения существующего компилятора C ++

Существует два компилятора, которые вы можете расширить:

  • LLVM & Clang (но я не могу помочь, потому что я их мало знаю).
  • GCC (версия 4.6 пожалуйста) можно расширять с помощью плагинов или кодируя расширение MELT MELT - это высокоуровневый домен-специфический язык для расширения компилятора GCC;проще кодировать ваше расширение в MELT, чем в плагин на C. [Я являюсь основным автором MELT]

Расширение GCC, на мой взгляд (предвзято), является хорошим способом сделать это.Но я признаю, что (даже с помощью MELT) это нетривиально, потому что вам нужно частично понять основные внутренние представления GCC (Gimple, Tree) и внутренние проходы.(Я предполагаю, что у вас та же проблема с LLVM / Clang: чтобы расширить его, вам нужно это понять).

Расширения GCC (в MELT) или плагины (в C) в основном работают с представлениями Gimple (послерасширение шаблона).

Если вы заинтересованы в использовании MELT, не стесняйтесь спрашивать меня.

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

...