Vim+cscope+ctags+tags linux下閱讀原始碼

來源:互聯網
上載者:User

轉至:http://zhwen.org/?p=articles/cscope-tags

linux原始碼提供了製作cscope索引檔案和tags檔案的make命令。

一,軟體安裝

先安裝cscope:

sudo apt-get install cscope

在安裝ctags:
http://ctags.sourceforge.net/

可以使用:ctags –version來查看當前ctags的版本是否是emacs的。
要是安裝了emacs的話就必須使用上面這個地址的ctags,vim不支援emacs的ctags,所以要下載安裝這個ctags,下載之後在源檔案所在目錄運行:

helight@helight-desktop:~/Desktop/ctags-5.7$  ./configurehelight@helight-desktop:~/Desktop/ctags-5.7$ make

即可產生ctags檔案,將這個檔案儲存到“/usr/bin/”目錄下即可。

二,產生索引檔案

在原始碼目錄下使用一下兩條命令即可產生cscope索引檔案和tags檔案。

helight@helight-desktop:~/Downloads/linux-2.6.26$ make cscopeFILELST cscope.filesMAKE    cscope.outhelight@helight-desktop:~/Downloads/linux-2.6.26$ make tagsMAKE   tagshelight@helight-desktop:~/Downloads/linux-2.6.26$ ls tags -l-rw-r–r– 1 helight ftp 69274841 2008-09-27 11:04 tagshelight@helight-desktop:~/Downloads/linux-2.6.26$ ls cscope.* -l-rw-r–r– 1 helight ftp  23814144 2008-09-25 20:08 cscope.in.out-rw-r–r– 1 helight ftp    609665 2008-09-25 20:06 cscope.list-rw-r–r– 1 helight ftp 174470617 2008-09-25 20:08 cscope.out-rw-r–r— 1 helight ftp 124973256 2008-09-25 20:08 cscope.po.out



三,一般源檔案中產生索引檔案

為了方便使用,編寫了下面的指令碼來更新cscope和ctags的索引檔案:

#!/bin/shfind . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.filescscope -bkq -i cscope.filesctags -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列出了這個符號出現的所有位置。我們還可以進行字串尋找,它會雙引號或單引號括起來的內容中尋找。還可以輸入一個Regex,這類似於egrep程式的功能。
在原始碼目錄下開啟vim。要使用cscope尋找就必須載入cscope.out檔案.在vim命令列下執行:

:cs add cscope.out

在vim命令列下執行:

:cs helpcscope 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 tohelp : 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中使用tags尋找符號:

在vim命令列下執行:

:tag xxx

即可找到你想找的函數或是資料結構或是函數xxx
關於tags的其它用法可以在vim中執行”:help tags”命令進行查詢。

六,其它命令介紹:

ctrl+]:在函數調用的地方跳轉到函數定義的地方
ctrl+t:返回上一個尋找的地方

七,特別注意:

所產生的cscope.out和tags檔案要在開啟VIM所在的檔案夾,否則VIM無法找到相關符號資訊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.