Исходный файл для определения функции

Я работаю над очень сложным приложением, развернутым в Unix (HP-UX) с количеством исходных файлов C / C ++> 10-15k.
Я хотел бы знать, могу ли я искать точное имя файла, имеющего определение определенной пользовательской функции. Есть много таких функций, вызываемых из нескольких мест, и для поиска с использованием grep требуется время.

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

Также, как я могу пометить функцию в редакторе vi, которая помогает перейти в другой файл, имеющий его определение? я знаю, что это может быть достигнуто с помощью ctags (Ctrl + [). Есть ли другой способ возможен?

Пожалуйста, напишите, если существует соответствующая тема. Спасибо.

1

Решение

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

Поиск текста

Вы уже упоминали, используя grep но сказал, что требуется время, чтобы просеять результаты, потому что сайты вызовов появляются вместе с определениями. Чтобы избежать этого, вы можете настроить свой grep шаблон. Сначала попробуйте очистить только заголовочные файлы:

find PATH -name '*.h' | xargs grep FUNC

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

Или попробуйте специальный шаблон, чтобы искать только определения:

grep 'FUNC(.*) *$'

Это будет соответствовать только тем местам, где правая скобка находится в конце строки (по модулю пробела). Это отфильтрует большинство сайтов вызовов и объявлений, хотя и не идеально.

Поиск кода объекта

При таком подходе вы сначала генерируете список символов, определенных в каждом объектном файле. Это предполагает, что вы имеете или можете генерировать эти промежуточные артефакты сборки, и опять же, что ваш проект следует общепринятой практике. Вы бы использовали nm как подробно здесь: Как я могу найти функцию в общих объектных файлах, используя функции objdump и bash в linux?

Вы можете сделать псевдонимы для вышеуказанных команд в вашем .bashrc сделать их проще в использовании.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]