我在网上找到的所有cscope教程都谈到了如何使用cscope的交互模式来搜索编辑器中的符号,例如vim和emacs。但我认为应该可以在终端发出命令来执行类似
的操作cscope -d -some_options <my symbol>
我应该能够在stdout中看到结果列表,而不必进入ncurse UI并在那里做所有事情。我认为这是可能的,因为“唯一”的前端cbrowser可以在其TclTK UI中执行类似的操作。但不幸的是,这些代码完全超出了我的范围。
但是,我没有找到关于此功能的文档。
我是在做梦,还是有无证件的做法?
谢谢!
更新
一些进展:如果我使用sub-dir结构创建一个包含少量文件的小项目。然后rici的答案开箱即用。使用更大的项目(数千个具有复杂文件夹结构的文件)。即使cscope.out和cscope.files存在于项目文件夹的根目录(也是我当前的工作目录),我从同一个命令和相同的符号中得不到任何东西。我怀疑该命令存在可伸缩性问题。我也试过命令
cat cscope.files | xargs cscope -d -L1 <symbol> -i
无济于事。
更新
非常奇怪!我试着用其他一些符号。原来,我正在搜索的特定符号无法使用命令行显示。但我试过的所有其他符号都有效。并且cbrowser找到“失败”符号没有问题。无论如何,我只是运气不好。我会在命令行中单独询问有关此异常的问题。
我认为rici的答案是正确的。
答案 0 :(得分:17)
你可能正在寻找这个:
cscope -L1<symbol>
您也可以使用-d
,但如果您正在修改文件,那么cscope更新它的数据库是件好事。
-L
表示“执行一个面向行的命令”,并且下面的数字(在这种情况下为1
),也可以作为单独的选项编写,是特定的命令, manpage令人困惑地称之为“字段”。 “字段”由交互式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:
答案 1 :(得分:4)
您可以使用-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
创建-R
文件时也可以使用cscope.out
选项,例如:
cscope -bR