cscope:如何使用cscope搜索一个符号使用命令行?

new9mtju  于 2023-06-21  发布在  其他
关注(0)|答案(2)|浏览(137)

我在网上找到的所有cscope教程都讨论了如何使用cscope的交互模式在vim和emacs等编辑器中搜索符号。但我认为应该可以在终端中发出命令来执行以下操作

cscope -d -some_options <my symbol>

我应该能够在stdout中看到结果列表,而不必进入ncurse UI并在那里执行所有操作。我认为这是可能的,因为“唯一”的前端cbrowser可以在它的TclTK UI中做这样的事情。但不幸的是,代码完全超出了我的能力。
但是,我没有找到有关此功能的文档。
我是在做梦还是有一个没有记录的方法来做到这一点?
谢谢!

更新

一些进展:如果我做一个小项目的几个文件与子目录结构。那么rici的答案就很好用了。更大的项目(数千个文件和复杂的文件夹结构)。即使cscope.out和cscope.files存在于项目文件夹的根目录(也是我当前的工作目录),我从相同的命令和相同的符号中什么也得不到。我怀疑该命令存在可伸缩性问题。我也试过指挥

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

但毫无结果

更新

太诡异了!我试着用其他的符号。原来我正在搜索的特定符号无法使用命令行显示。但我试过的其他符号都起作用了。而且cbrowser在查找“失败”符号时没有问题。总之,我只是运气不好。我将在命令行中问一个关于此异常的单独问题。
我把理西的答案标为正确。

wgmfuz8q

wgmfuz8q1#

你可能正在寻找这个:

cscope -L1<symbol>

您也可以使用-d,尽管如果您正在修改文件,那么cscope更新它的数据库是很好的。
-L表示“执行一个单行命令”,下面的数字(在本例中为1)也可以作为一个单独的选项编写,它是特定的命令,手册页将其混淆为“字段”。“字段”由交互式cscope提示符给出;我为了方便起见加上了这个数字。“this”是指数字后面的文本;请记住,这是一个模式,所以你不必键入完整的符号。

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:

Manpage引用

-d     Do not update the cross-reference.

       -L     Do a single search with line-oriented output when used with the -num pattern option.

       -l     Line-oriented interface (see ``Line-Oriented Interface'' below).

https://linux.die.net/man/1/cscope

yqkkidmi

yqkkidmi2#

您可以使用-R版本调用cscope进行递归搜索。例如:

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的所有位置)
如果cscope.out位于当前工作目录中,则可以省略-f选项。
请注意,如果省略-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

在创建cscope.out文件时也可以使用-R选项,例如:

cscope -bR

相关问题