Как я могу быстро найти все включенные заголовочные файлы в проекте для определенной функции или макроса? - PullRequest
8 голосов
/ 27 марта 2012

Вот проблема, с которой я столкнулся в последнее время, просто ОБЯЗАНА быть обычной болью для других здесь.

Я работаю с чужим унаследованным кодом C и мне нужно найти, где была определена функция или макрос.Код #include представляет собой набор различных стандартных системных библиотек в дополнение к библиотекам из конкретного проекта.

Существует ли инструмент или метод, позволяющий быстро определить, где определена определенная функция, макрос или другая глобальная функция?

Я пробовал:

grep -R 'function' /usr/lib

и другие подобные * nix / bash-fu только с ограниченным успехом и большим количеством раздражающей болтовни.У одного из вас, мудрых программистов, должно быть хорошее решение этого, казалось бы, обычного сценария.

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

Заранее спасибо за любые советы!

Ответы [ 7 ]

4 голосов
/ 27 марта 2012

Используйте etags / ctags из проекта exuberant ctags вместе с редактором (emacs, vim), который их понимает, или GNU GLOBAL .

Ох, и если вам случится использовать automake, он сгенерирует цель TAGS.Так что нет необходимости в сложных ручных вызовах {c,e}tags.

1 голос
/ 28 марта 2012

Вот что вы можете сделать, если вы используете gcc, если не просто измените его соответствующим образом.

gcc -E myfile.c | grep '^#' | cut -f 3 -d ' ' | sort |uniq | xargs -n 1 grep -l "MYMACROORFUNCTIONNAME"
1 голос
/ 27 марта 2012

Используйте ctags / cscope + vim / emacs

вы можете гуглить за их подробное использование.

если вы используете ctags + vim, вы можете:

1. перейти в каталог /usr/include, извините ctags -f tags1 -R . создать теги

2. генерируйте теги для своего кода в каталоге кодов ctags -f tags2 -R.

3.run :set path+=tags1,tags2 в вашем vim

4. под функцию или марко попробуйте CTRL+]

0 голосов
/ 27 марта 2012

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

Подходы тегов, конечно, хороши, потому что они нене зависит от правильно включенных заголовков.

0 голосов
/ 27 марта 2012

вы можете использовать cscope или emacs/vim + xcscope.el, чтобы сделать это легко. Я думаю это тесто, а не кейдж и этаж.

0 голосов
/ 27 марта 2012

vim + ctags - путь. Вы можете перейти к определению функций, глобальных переменных, макросов и т. Д. И т. Д. И т. Д.

FYI, просмотр программ с тегами

Кроме того, если вы хотите быстро переключаться между файлами .c и .h , обратитесь к этому блогу

0 голосов
/ 27 марта 2012

Вы можете использовать Eclipse CDT.Например, здесь описано, как настроить проект CDT для навигации по источнику ядра Linux - Как использовать CDT для навигации по источнику ядра Linux .

...