Пометка источника С++

Любые предложения по качественному способу пометить и найти код на С++. Я использую cscope/ctags для большинства вещей, но я нашел, что этого недостаточно, чтобы найти свой путь вокруг слишком сложного кода на С++. Я начал переключать с vim на Slickedit (который все еще не идеален, но лучше) для просмотра кода, но хотел бы вернуться к исключительно vim.

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

Я бы предпочел что-то, что уже хорошо работает с vim, но любой пакет с открытым исходным кодом, который мог бы создать сам плагин, будет в порядке.

Любые предложения оценили, спасибо.

Ответы

Ответ 1

Вы уверены, что вызвали ctags с правильными параметрами? Для С++ я использую:

ctags --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++

Это то, что документация должна сказать о опции --c++-kinds=+p:

При анализе определения функции члена С++ (например, "className:: function" ), ctags не может определить, спецификатор области это имя класса или спецификатор пространства имен и всегда перечисляет его как имя класса в области области расширения полей расширения. Кроме того, если С++ функция определена вне объявления класса (обычный случай), (т.е. публичный, защищенный или закрытый) и информация о реализации (например, виртуальная, чистая виртуальная), содержащаяся в функции объявление не известно, когда тег генерируется для функции определение. Он, однако, будет доступен для прототипов
(например, --С++ - types = + p).

Параметр --fields=+iaS:

 a   Access (or export) of class members
 i   Inheritance information
 S   Signature of routine (e.g. prototype or parameter list)

Параметр --extra=+q:

Поскольку, по умолчанию, ctags генерирует только теги для отдельных идентификаторов, найденных в исходных файлах. Если вы укажете опцию -extra = + q, то ctags также второй, класс-квалифицированный тег для каждого члена класса (данные и функция/метод) в форме class:: member для С++ и в форме class.method для Eiffel и Java.

Параметр --language-force=C++:

По умолчанию ctags автоматически выбирает язык исходного файла, игнорируя те файлы, язык которых не может быть определен (см. ИСТОЧНИКИ ФАЙЛОВ, выше). Этот параметр заставляет заданный язык (без учета регистра, либо встроенный, либо определяемый пользователем) использоваться для каждого поставляемого файла вместо автоматического выбора языка на основе его расширения. Кроме того, специальное значение auto указывает, что язык должен быть автоматически выбран (что эффективно отключает эту опцию).

Ответ 2

используйте doxygen его отличный инструмент для просмотра кода и просмотра отношений между классами и членами друг с другом. инструмент производит кликабельный вывод html для вашего исходного кода со ссылками для каждого использования. вы можете скомпилировать его в файл chm с возможностью поиска или использовать веб-сервер для поиска кода для ключевых слов.

Ответ 3

Попробуйте GNU global http://www.gnu.org/software/global/

Он может создавать навигационные веб-страницы исходного кода, а также поддерживать vim и интерфейс командной строки, который часто бывает полезен.

Ответ 4

У меня нет опыта с этим, но я использовал Doxygen для просмотра исходного кода сложных проектов. Просто запустите его со всеми включенными настройками, и он будет генерировать диаграммы вызовов, графические диаграммы, ссылки и ссылки на ссылки, экземпляры шаблонов и т.д. Форматы вывода включают HTML, LaTeX, CHM, POD

Надеюсь, что это сработает!

Ответ 5

Некоторое время я использовал различные инструменты для этой цели. Vi - отличный редактор, и вы можете запускать его на удаленных компьютерах без проблем, но информация о завершении не является семантической.

При столкновении с большой проблемой я склонен использовать либо Eclipse CDT, либо QTCreator, в обоих случаях последние версии, версии с года назад, на самом деле не так хороши. QTCreator - легкий инструмент, но я очень впечатлен его способностью анализировать код. Eclipse CDT имеет более тяжелый вес, но я немного больше привык к интерфейсу, поэтому в конце я его использую.

Проект, над которым я работаю, скомпилирован в отдельной изолированной программной среде, где ни одна из этих двух IDE не может использоваться, но вы можете получить копию репозитория только для анализа и использовать среду IDE как инструмент просмотра.