c++cvimemacscscope

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


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.


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