Что такое хороший инструмент для просмотра/просмотра кода C?

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Например:

$cd/usr/src/redhat/BUILD/kernel-version

$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-сфере при работе над кем-то проектом elses. Я использую это, чтобы открывать файлы с помощью "gvim" (моя IDE), редактировать вещи, а затем "вернуться" в c-scope, Это помогает мне сфокусироваться на задаче.

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

Удачи вам.

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

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

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

Ответ 11

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

Ответ 12

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

http://www.doxygen.org

Ответ 13

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

Ответ 14

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

Ответ 15

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

Не похоже, что существует версия более поздняя, ​​чем 2006, но она все равно может работать по вашему желанию.

Ответ 16

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

Ответ 17

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

Ответ 18

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

Ответ 19

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

Ответ 20

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

Ответ 21

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

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

Ответ 22

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

И если вы, то его ДОЛЖНО ИМЕТЬ:)

Ответ 23

Cscope. (захотелось модифицировать другую должность, но у меня еще нет кармы).

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

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

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

Ответ 24

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

Ответ 25

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

Ответ 26

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

Ответ 27

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