All the cscope tutorials I found online talk about how to use the interactive mode of cscope to search for symbols in editors such as vim and emacs. But I think it should be possible to issue a command in terminal to do something like
cscope -d -some_options <my symbol>
And I should be able to see a list of results in stdout, instead of having to enter the ncurse UI and do everything there. I think this is possible because the "only" frontend cbrowser can do things like that in its TclTK UI. But the code unfortunately is quite beyond me.
However, I found no documentation about this capability.
Am I dreaming or is there an undocumented way of doing this?
Thanks!
UPDATE
Some progress: If I make a small project of a few files with sub-dir structure. Then rici's answer works out of the box. With a bigger project (thousands of files with complex folder structure). Even with a cscope.out and cscope.files present at the root of the project folder (also my current working directory), I got nothing from the same command and same symbol. I suspect that there is a scalability issue with the command. I also tried command
cat cscope.files | xargs cscope -d -L1 <symbol> -i
to no avail.
UPDATE
Extremely bizarre! I tried to use some other symbols. Turned out that the particular symbol I was searching for cannot be shown using the command line. But all other symbols I tried worked. And cbrowser has no problem finding that "failed" symbol. Anyways, I was just in bad luck. I'll ask a separate question about this anomaly in command line.
I marked rici's answer as correct.
You can call cscope with the -R
version for recursive searching. For example:
cscope -d -f/path/to/cscope.out -R -L1 some_symbol
(searches for the definition of some_symbol)
cscope -d -f/path/to/cscope.out -R -L3 some_symbol
(shows all locations where some_symbol is called)
You can omit the -f
option if cscope.out is located in the current working directory.
Note that the above call yield zero results for an indexed symbol if -R
is omitted. Very old cscope versions don't support -R
. For example, version 15.8a does support it.
The list of possible values for -L
is:
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
The -R
option can also be used when creating the cscope.out
file, e.g.:
cscope -bR