cscope的用法

摘要:
其中cscope Out是基本的符号索引。最后两个文件是使用“-q”选项生成的,这可以加快cscope的索引。该脚本首先使用find命令查找当前目录和子目录中后缀为“.h”、“.c”和“.c”的所有文件,并将搜索结果重定向到文件cscope files。最后一个命令使用ctags命令生成标记文件。在vim中执行“:helptags”命令以查询其用法。

一,一般源文件中生成索引文件

为了方便使用,编写了下面的脚本来更新cscope和ctags的索引文件:

#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R


这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。
这个脚本,首先使用find命令,查找当前目录及子目录中所有后缀名为".h", ".c"和".c"的文件,并把查找结果重定向到文件cscope.files中。然后cscope根据cscope.files中的所有文件,生成符号索引文件。最后一条命令使用ctags命令,生成一个tags文件,在vim中执行":help tags"命令查询它的用法。它可以和cscope一起使用。上面所用到的命令参数,含义如下:
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

二,在VIM使用cscope查找

1,加载cscope.out文件
在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能。
在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.在vim命令行下执行:

:cs add cscope.out

在vim命令行下执行:

:cs help
cscope commands:
add : Add a new database (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)
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
help : Show this message (Usage: help)
kill : Kill a connection (Usage: kill #)
reset: Reinit all connections (Usage: reset)
show : Show connections (Usage: show)


s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文

2,使用cscope查找do_fork函数的定义:
在vim命令行下执行:

:cs f g do_fork
三,在VIM中使用cscope快捷键:
下面是我的.vimrc的配置,在该配置下,在使用vim打开文件时,默认加载当前目录下的cscope.out文件,如果没有的话就得用cs add命令手动加载了。另外也映射了查找的快捷键,如先按ctrl+\键,然后再按g键,将查找当前光标下关键字的定义出。
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif
 

nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>

四,在VIM中使用tags查找符号:

在vim命令行下执行:

:tag xxx

即可找到你想找的函数或是数据结构或是函数xxx
关于tags的其它用法可以在vim中执行”:help tags”命令进行查询。

五,其它命令介绍:

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

七,特别注意:

所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。

免责声明:文章转载自《cscope的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows Subversion与TortoiseSVN安装与使用亚马逊AWS学习——多网络接口下配置EC2实例连接公网的一个“bug”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vim使用笔记

一,基本设置 set nu          #显示行号set ts=2          #将tab设为2个空格set shiftwidth=2        #自动缩进为2个空格set expandtab         #缩进用空格表示set autoindent        #自动缩进set cursorline          #当前光标所在...

Vim的字符编码设置

Vim编码方式的设置 和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,包括UCS-2、UTF-8 等流行的 Unicode 编码方式。但是,这需要用户自己动手设置。  Vim有四个跟字符编码方式有关的选项,分别是:encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请...

MySQL----ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

1、问题描述 在导入同事提供的一个sql文件时候,出现了一个1071错误,总结学习一下: 2、分析问题 错误的字面意思是说mysql字段设置的值太长了,不能大于767个字节,在网上找了一些资料后才知道原理: 当我们给表建立索引时,数据库会计算key的长度是累加所有Index用到的字段的char长度后再按下面比例乘起来不能超过限定的key长度(myisam...

Sql Server 优化的方法

<!--StartFragment-->查询速度慢的原因很多,常见如下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查...

VIM基本操作

命令模式:进入:其他模式都可以直接转换到命令模式,按Esc即可。如果一次不行就多按几次。主要用来浏览和操作文件,可以使用相关的快捷键,例如:gg:跳到文件首 ngg:跳到文件n行 shitf + g:跳到行文件尾 yy: 复制光标所在的一行yny:复制光标处起的n行p:粘贴 16进制查看 gvim -b binaryfile      :%!xxd -g...

Oracle索引梳理系列(二)- Oracle索引种类及B树索引

版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载。转载时,请在文章明显位置注明原文链接。若在未经作者同意的情况下,将本文内容用于商业用途,将保留追究其法律责任的权利。如果有问题,请以邮箱方式联系作者(793113046@qq.com)。 Oracle索引种类 一 Oracle索...