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 <Ctrl>-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 <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("<cword>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cword>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
使用上面的快捷键的方法是,将光标定位到你要查找的变量,函数名或者宏定义名处。先按下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:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容

  • 本文非原创,引用自:http://easwy.com/blog/archives/advanced-vim-ski...
    1angxi阅读 9,045评论 0 2
  • 今晚看了一个关于解决家庭纠纷的视频,在此视频中,嘉宾对一个出于单亲家庭的男人给其母亲帮他保管钱的事质问那位母亲:是...
    梦里行阅读 141评论 0 0
  • 事实上,养成任何非天生的习惯,都是需要挣扎才能做成的事情。我们只有一个习惯是天生的——“懒惰”。对每个人来说,懒惰...
    沈姐说说阅读 213评论 5 9
  • 今天中午语文课,老师让我们用一个半小时写作文,说放学的时候要加齐,然而作为组长的我却是我们组最后一个交的!还拖到了...
    牧羊人的女儿阅读 162评论 0 1
  • 一 浙大法学院所在地叫“之江校区”,坐落在一个叫月轮山的山腰上。从此往前一站是九溪,往后一站是六和塔,濒临钱塘江,...
    以一圣真阅读 2,645评论 4 9