cscope的用法
一,一般源文件中生成索引文件
為了方便使用,編寫了下面的腳本來(lái)更新cscope和ctags的索引文件:
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R
這個(gè)命令會(huì)生成三個(gè)文件:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符號(hào)索引,后兩個(gè)文件是使用"-q"選項(xiàng)生成的,可以加快cscope的索引速度。
這個(gè)腳本,首先使用find命令,查找當(dāng)前目錄及子目錄中所有后綴名為".h", ".c"和".c"的文件,并把查找結(jié)果重定向到文件cscope.files中。然后cscope根據(jù)cscope.files中的所有文件,生成符號(hào)索引文件。最后一條命令使用ctags命令,生成一個(gè)tags文件,在vim中執(zhí)行":help tags"命令查詢它的用法。它可以和cscope一起使用。上面所用到的命令參數(shù),含義如下:
-R: 在生成索引文件時(shí),搜索子目錄樹中的代碼
-b: 只生成索引文件,不進(jìn)入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件時(shí),不搜索/usr/include目錄
-i: 如果保存文件列表的文件名不是cscope.files時(shí),需要加此選項(xiàng)告訴cscope到哪兒去找源文件列表。可以使用“-”,表示由標(biāo)準(zhǔn)輸入獲得文件列表。
-I dir: 在-I選項(xiàng)指出的目錄中查找頭文件
-u: 掃描所有文件,重新生成交叉索引文件
-C: 在搜索時(shí)忽略大小寫
-P path: 在以相對(duì)路徑表示的文件前加上的path,這樣,你不用切換到你數(shù)據(jù)庫(kù)文件所在的目錄也可以使用它了。
二,在VIM使用cscope查找
1,加載cscope.out文件
在VIM中使用cscope非常簡(jiǎn)單,首先調(diào)用“cscope add”命令添加一個(gè)cscope數(shù)據(jù)庫(kù),然后就可以調(diào)用“cscope find”命令進(jìn)行查找了。VIM支持8種cscope的查詢功能,如下:例如,我們想在代碼中查找調(diào)用work()函數(shù)的函數(shù),我們可以輸入:“:cs find c work”,回車后發(fā)現(xiàn)沒(méi)有找到匹配的功能,可能并沒(méi)有函數(shù)調(diào)用work()。我們?cè)佥斎搿?cs find s work”,查找這個(gè)符號(hào)出現(xiàn)的位置,現(xiàn)在vim列出了這個(gè)符號(hào)出現(xiàn)的所有位置。我們還可以進(jìn)行字符串查找,它會(huì)雙引號(hào)或單引號(hào)括起來(lái)的內(nèi)容中查找。還可以輸入一個(gè)正則表達(dá)式,這類似于egrep程序的功能。
在源代碼目錄下打開vim。要使用cscope查找就必須加載cscope.out文件.在vim命令行下執(zhí)行:
:cs add cscope.out
在vim命令行下執(zhí)行:
: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語(yǔ)言符號(hào),即查找函數(shù)名、宏、枚舉值等出現(xiàn)的地方
g: 查找函數(shù)、宏、枚舉等定義的位置,類似ctags所提供的功能
d: 查找本函數(shù)調(diào)用的函數(shù)
c: 查找調(diào)用本函數(shù)的函數(shù)
t: 查找指定的字符串
e: 查找egrep模式,相當(dāng)于egrep功能,但查找速度快多了
f: 查找并打開文件,類似vim的find功能
i: 查找包含本文件的文
2,使用cscope查找do_fork函數(shù)的定義:
在vim命令行下執(zhí)行:
:cs f g do_fork
三,在VIM中使用cscope快捷鍵:
下面是我的.vimrc的配置,在該配置下,在使用vim打開文件時(shí),默認(rèn)加載當(dāng)前目錄下的cscope.out文件,如果沒(méi)有的話就得用cs add命令手動(dòng)加載了。另外也映射了查找的快捷鍵,如先按ctrl+\鍵,然后再按g鍵,將查找當(dāng)前光標(biāo)下關(guān)鍵字的定義出。
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 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查找符號(hào):
在vim命令行下執(zhí)行:
:tag xxx
即可找到你想找的函數(shù)或是數(shù)據(jù)結(jié)構(gòu)或是函數(shù)xxx
關(guān)于tags的其它用法可以在vim中執(zhí)行”:help tags”命令進(jìn)行查詢。
五,其它命令介紹:
ctrl+]:在函數(shù)調(diào)用的地方跳轉(zhuǎn)到函數(shù)定義的地方
ctrl+t:返回上一個(gè)查找的地方
七,特別注意:
所生成的cscope.out和tags文件要在打開VIM所在的文件夾,否則VIM無(wú)法找到相關(guān)符號(hào)信息。
天不會(huì)黑
總結(jié)
- 上一篇: iOS音频播放(一):概述
- 下一篇: leetcode586. 订单最多的客户