Все учебники по 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 нет проблем с поиском этого «провального» символа. В любом случае, мне просто не повезло. Я задам отдельный вопрос об этой аномалии в командной строке.
Я отметил ответ Ричи как правильный.
Вы можете позвонить в 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
Вы, вероятно, ищете это:
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: