Что такое хороший инструмент, чтобы помочь в просмотре / после кода C?

Иногда мне нужно изменить код OSS или код других людей (обычно на основе C, но иногда C++/Java) и найти себе "grep" заголовки для типов, объявлений функций и т. Д., Когда я следую за потоком кода и пытаюсь понять систему, Существует ли хороший инструмент для помощи в просмотре кода. Я бы хотел иметь возможность щелкнуть тип и перейти к объявлению или щелкнуть имя функции и перейти к ее реализации. Я использую Linux, поэтому ответы типа "просто используй Visual Studio" не обязательно будут работать для меня. Спасибо!

27 ответов

Вы не можете получить ничего лучше, чем SourceInsight.

Я использую Vim с плагинами ctags и taglist. Вы можете переместить курсор к имени переменной, и с помощью комбинации клавиш он приведет вас к объявлению переменной (и обратно). Taglist также покажет обзор всех функций, классов и т. Д. На боковой панели.

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

Я слышал удивительные вещи об OpenGrok. Я знаю, что другая команда на моем рабочем месте использует это, и они считают это очень полезным. С его веб-сайта:

OpenGrok - это быстрый и удобный механизм поиска исходного кода и перекрестных ссылок. Это поможет вам искать, перекрестные ссылки и перемещаться по вашему исходному дереву. Он может понимать различные форматы программных файлов и истории контроля версий, такие как Mercurial, Git, SCCS, RCS, CVS, Subversion, Teamware, ClearCase, Perforce и Bazaar. Другими словами, это позволяет вам получить (глубоко понять) открытый исходный код, отсюда и название OpenGrok. Это написано на Java.

Eclipse IDE может работать с C/C++ в дополнение к Java. На сайте IBM Works Works есть описание того, как настроить Eclipse для разработки на C/C++.

редактировать: почему это было отклонено? Это правильный ответ. Затмение с дополнением C/C++ позволит автору вопроса делать то, что он хочет. Я не единственный, кто предложил, но другие не были отклонены. Так почему же за это проголосовали?

Я делаю немного в пространстве ядра, и продолжаю возвращаться назад.

Например:

$ cd / usr / src / redhat / BUILD / версия ядра

$ cscope -R -p4

   Find this C symbol:
   Find this function definition:
   Find functions called by this function:
   Find functions calling this function:
   Find this text string:
   Change this text string:
   Find this egrep pattern:
   Find this file:
   Find files #including this file:

Я обычно "живу" в c-scope, когда работаю над чьим-либо другим проектом. Я использую это, чтобы открывать файлы с помощью "gvim" (моя IDE), редактировать вещи, а затем выходить "обратно" в c-scope, это помогает мне сохранять целевую задачу.

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

Удачи вам.

Vim и Ctags у меня работает.

Перейдите на Doxygen и установите EXTRACT_ALL в YES. Это просто мощно и легко. Как только вы полюбите его, вы можете придерживаться его на всех платформах и языках.

http://www.doxygen.org/

Doxygen - это прекрасно. Мне приходилось сталкиваться с несколькими унаследованными базами кода, в которых я никогда не участвовал, и это было фантастически для этого (хотя базы кода не были задокументированы с использованием формата Doxygen).

Я поддерживаю использование doxygen.

Этот инструмент сгенерировал javadoc-подобный набор html-страниц, позволяющий индексировать весь код, просматривать его (где используется эта функция и какой функцией...), как вы можете сделать в IDE. Сделать это очень легко.

Когда-то мне приходилось поддерживать 2000 файлов кода C 15-летнего C-проекта. Мне потребовался час, чтобы проиндексировать код с помощью doxygen и предоставить другим разработчикам сгенерированный документ. (Я знаю, эта фраза звучит как надстройка, но это правда... Это действительно хороший инструмент)

Прекрасный инструмент, который работает на всех C-подобных языках.

ctags очень полезен Есть два этапа. Сначала запустите программу ctags на всех ваших источниках и включите каталоги. Это создает файл с именем "теги" в локальном каталоге. ctags *.c *.h будет хорошо, если весь ваш источник находится в одном каталоге. Когда вы работаете с источником в нескольких каталогах, может быть целесообразно запускать ctags в нескольких местах. Затем внутри vi, наведя курсор на любую функцию, определенный тип или переменную, используйте ctl-], чтобы перейти к определению этой сущности. Используйте etags, если вы используете emacs.

Если вы участвуете в проектах, которые сочетают в себе HLL-код и ассемблер, я бы порекомендовал Opengrok, я недавно перешел на Opengrok и нахожу это удивительным, Opengrok + Firefox + Extensions - это, на мой взгляд, лучшая комбинация, несколько расширений Firefox как Scrapbook и т. д. позволяют изменять и добавлять заметки во время просмотра кода, опять же, это в основном для "просмотра" кода, а не для его изменения на лету.

Если вы ищете что-то простое и вездесущее, попробуйте etags. Он не будет так хорош, как тяжелые инструменты, но он работает практически на всем и работает с emacs. Используйте ctags для vi.

В поисковой системе SD Source Code Search можно найти механизм поиска исходного кода, чувствительный к языку. Он может обрабатывать много языков одновременно. Поиск может быть выполнен для шаблонов в определенном языке или шаблонов по языкам (например, "найти идентификаторы, включающие TAX"). Благодаря чувствительности к токенам языка количество ложных срабатываний сокращается, что экономит время пользователя. Он понимает C, C++, C#, COBOL, Java, ECMAScript, Java, XML, Verilog, VHDL и ряд других языков.

Я пользуюсь и люблю бесплатный программный инструмент GNU global.

Cscope. (хотел изменить другой пост, но у меня пока нет кармы).

  • глобальный поиск и замена
  • найти все места, где вызывается функция
  • найти все места, вызываемые функцией
  • найти файлы, включая этот файл.

действительно простое использование: $ cscope -R

если вы не знаете vi, измените переменные окружения EDITOR и VIEWER на предпочитаемый вами редактор.

Я не использовал его напрямую, но я использовал сайты, созданные с помощью lxr, и подумал, что это очень удобно. Он преобразует ваш проект в HTML-файлы с нумерацией строк и перекрестными ссылками, используя ссылки на функции перекрестных ссылок и имена файлов. Вот несколько примеров источников проектов, проиндексированных здесь.

Не похоже, что есть версия новее, чем 2006, но она все еще может работать для того, что вы хотите.

Любая IDE будет работать нормально. NETbeans и Eclipse основаны на Java, но имеют плагины для C/C++

Я использую Anjuta IDE. Неплохо. Не уверен, как он сравнивается с Eclipse IDE.

Я нахожу ID Utils довольно удобным. Это как мгновенный рекурсивный grep. Есть множество рецептов Vim, чтобы пойти с ним.

Я использую Understand для C++. Это очень удобный инструмент для работы с большим количеством кода. Он также может рассчитать статистику кода и нарисовать график звонков. Должен иметь!

IntelliJ довольно хорош в качестве исходного браузера под Linux. У него действительно хорошая поддержка для перехода между объявлениями источника и функции. Не пробовал его с кодом C/C++, но он хорошо работает с Ruby и Java.

Я использую Source-Navigator(TM) отсюда. Это впечатляет и очень помогает. Он написан на Tcl/Tk, доступен как исполняемый файл для Windows и как исходный код, готовый для сборки на *nix.

Я использую kscope, который использует cscope в фоновом режиме, но также предоставляет списки функций и т. Д. Кажется, хорошо справляется и с большими проектами, такими как ядро ​​Linux. На домашней странице kscope есть хорошее краткое описание того, что он делает и чего не делает.

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

Я добился больших успехов, используя Doxygen. Для достижения наилучших результатов (особенно при создании документации для C++) установите graphviz и включите его в файле конфигурации doxygen.

Это автоматически сгенерирует карты зависимостей и диаграммы классов, которые связаны с остальной HTML-документацией.

Даже если вы не разработчик, перейдите на Source Insight

И если вы, это должно быть:)

Другие вопросы по тегам