cscope

cscope

安装

原谅我的懒惰
sudo apt-get install cscope

使用

1. 先建立数据库

相当于source insight(之后简称为SI)的同步

转到目录里面 cscope -Rbq

参数解释:
R recursively
b 只建立数据库(cscope.out),不进入cscope
q 建立数据库的同时,同时建立加速文件,使用这个选项,会在当前目录下产生多个cscope的文件
k 不分析/usr/include下面的文件,用户态程序一定不要加上这个符号,否则没法知道这个函数到底是不是一个系统库函数

-b Build the cross-reference only.
-C Ignore letter case when searching.
-c Use only ASCII characters in the cross-ref file (don't compress).
-d Do not update the cross-reference.
-e Suppress the -e command prompt between files.
-F symfile Read symbol reference lines from symfile.
-f reffile Use reffile as cross-ref file name instead of cscope.out.
-h This help screen.
-I incdir Look in incdir for any #include files.
-i namefile Browse through files listed in namefile, instead of cscope.files
-k Kernel Mode - don't use /usr/include for #include files.
-L Do a single search with line-oriented output.
-l Line-oriented interface.
-num pattern Go to input field num (counting from 0) and find pattern.
-P path Prepend path to relative file names in pre-built cross-ref file.
-p n Display the last n file path components.
-q Build an inverted index for quick symbol searching.
-R Recurse directories for files.
-s dir Look in dir for additional source files.
-T Use only the first eight characters to match against C symbols.
-U Check file time stamps.
-u Unconditionally build the cross-reference file.
-v Be more verbose in line mode.
-V Print the version number.

TIPS:
建立完毕数据库之后,如果在当前目录再次执行cscope,会使得重新建立数据库,除非两次执行cscope的参数一致!

2. 直接使用使用cscope

当前目录下执行cscope -Rq(k) 不加-b 参数即可进入cscope

3. vim下使用cscope

3.1 vim中添加cscope数据库文件

cs add /path/to/cscope.out [prepend path ] -C
-C 指的是查找的时候忽略大消息
[prepend path] 作用不确定

cs show
可以查看已经加入的数据库文件

cs kill
删除一个数据库

3.2 vim中搜索符号

cs find * symbol 等同于 cs f g symbol
查找symbol,

其中 * 可以是一下选项之一:
c: Find functions calling this function
d: Find functions called by this function
e: Find this egrep pattern
f: Find this file
g: Find this definition
i: Find files #including this file
s: Find this C symbol
t: Find assignments to

3.3 vim中使用快捷键

如果每次我没都输入"cs f g symbol",岂不是会累死?
cscope能不能像SI那样 ctrl + 鼠标左键 直接到达符号定义的地方?

cscope提供了一组快捷键,将下面的配置写入~/.vimrc文件下就可以了

nmap s :cs find s =expand("")
nmap g :cs find g =expand("")
nmap c :cs find c =expand("")
nmap t :cs find t =expand("")
nmap e :cs find e =expand("")
nmap f :cs find f =expand("")
nmap i :cs find i ^=expand("")$
nmap d :cs find d =expand("")
使用上面的快捷键的方法是,将光标定位到你要查找的变量,函数名或者宏定义名处。先按下Ctrl+@,松开后快速按下相应的键,比如按下g,表示查找该函数或者变量的定义;按下c表示查找本函数被调用的地方。功能很强大。

3.4 vim中的跳转

ctrl+]:在函数调用的地方跳转到函数定义的地方
ctrl+t:返回上一个查找的地方

3.5 cscope的vim建议配置

   if has("cscope")
            set csprg=/usr/local/bin/cscope
            set csto=0
            "find cscope db prior
            set cst
            " use cstags
            set nocsverb
            " add any database in current directory
            if filereadable("cscope.out")
                cs add cscope.out
            " else add database pointed to by environment
            elseif $CSCOPE_DB != ""
                cs add $CSCOPE_DB
            endif
            set csverb
    endif

这里面有很多vim的技巧

http://easwy.com/blog/archives/automatically_update_ctags_tag_cscope_database/

在 vim 中使用 cscope 时, : cs f s symbol-name 或相应的快捷键执行后当前窗口就跳转到引用该符号的位置。
如果想跳转的同时打开一个新的窗口,可以使用如下命令:
: scs f s symbol-name
这里的 scs 应该是 split 的意思。
另外,上面这个命令是将窗口横向分割,如果要纵向分割的话,可以使用如下命令:
: vert scs f s symbol-name
另外可以在 .vimrc 里追加对应的快捷键:
参考 help cscope:

你可能感兴趣的:(cscope)