问题
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.
回答1:
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
回答2:
You are probably looking for this:
cscope -L1<symbol>
You could use -d
as well, although if you're modifying the files, it's good for cscope to update it's database.
-L
means "execute a single line-oriented command", and the following digit (1
in this case), which could also have been written as a separate option, is the specific command, which the manpage confusingly calls a "field". The "fields" are given by the interactive cscope prompt; I added the digit for convenience. "this" refers to the text which follows the digit; remember that it's a pattern so you don't necessarily have to type the full symbol.
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:
来源:https://stackoverflow.com/questions/14915971/cscope-how-to-use-cscope-to-search-for-a-symbol-using-command-line