cscope: How to use cscope to search for a symbol using command line?

c, c++, cscope, emacs, vim

Solution

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

Problem

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.

Original source