cscope: как использовать cscope для поиска символа с помощью командной строки?

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

cscope -d -some_options <my symbol>

И я должен иметь возможность видеть список результатов в stdout, вместо того, чтобы вводить пользовательский интерфейс ncurse и делать все там. Я думаю, что это возможно, потому что «единственный» интерфейсный cbrowser может делать такие вещи в своем интерфейсе TclTK. Но код, к сожалению, совершенно за мной.

Однако я не нашел документации об этой возможности.

Я сплю или есть недокументированный способ сделать это?

Спасибо!

ОБНОВИТЬ

Некоторый прогресс: если я сделаю небольшой проект из нескольких файлов со структурой подкаталога. Тогда ответ Ричи работает из коробки. С большим проектом (тысячи файлов со сложной структурой папок). Даже при наличии cscope.out и cscope.files в корне папки проекта (также моего текущего рабочего каталога), я ничего не получил от той же команды и того же символа. Я подозреваю, что есть проблема масштабируемости с командой. Я тоже пробовал команду

cat cscope.files | xargs cscope -d -L1 <symbol> -i

но безрезультатно.

ОБНОВИТЬ

Чрезвычайно странно! Я пытался использовать некоторые другие символы. Оказалось, что конкретный символ, который я искал, не может быть показан с помощью командной строки. Но все остальные символы, которые я пробовал, работали. И у cbrowser нет проблем с поиском этого «провального» символа. В любом случае, мне просто не повезло. Я задам отдельный вопрос об этой аномалии в командной строке.

Я отметил ответ Ричи как правильный.

7

Решение

Вы можете позвонить в cscope с помощью -R версия для рекурсивного поиска. Например:

cscope -d -f/path/to/cscope.out -R -L1 some_symbol

(ищет определение some_symbol)

cscope -d -f/path/to/cscope.out -R -L3 some_symbol

(показывает все места, где вызывается some_symbol)

Вы можете опустить -f опция, если cscope.out находится в текущем рабочем каталоге.

Обратите внимание, что приведенный выше вызов приводит к нулевым результатам для индексированного символа, если -R опущен Очень старые версии cscope не поддерживают -R, Например, версия 15.8a поддерживает это.

Список возможных значений для -L является:

0: Find this C symbol
1: Find this definition
2: Find functions called by this function
3: Find functions calling this function
4: Find this text string
6: Find this egrep pattern
7: Find this file
8: Find files #including this file
9: Find places where this symbol is assigned a value

-R опция также может быть использована при создании cscope.out файл, например:

cscope -bR
4

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

Вы, вероятно, ищете это:

cscope -L1<symbol>

Вы могли бы использовать -d также, хотя, если вы изменяете файлы, для cscope полезно обновить свою базу данных.

-L означает «выполнить однолинейную команду» и следующую цифру (1 в данном случае), который также мог бы быть записан как отдельная опция, является конкретной командой, которую man-страница смущенно называет «полем». «Поля» задаются интерактивной подсказкой cscope; Я добавил цифру для удобства. «это» относится к тексту, который следует за цифрой; помните, что это шаблон, поэтому вам не обязательно вводить полный символ.

 0 Find this C symbol:
1 Find this function definition:
2 Find functions called by this function:
3 Find functions calling this function:
4 Find this text string:
5 Change this text string:
6 Find this egrep pattern:
7 Find this file:
8 Find files #including this file:
16

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector