使用Vim+Ctags+Cscope閱讀原始碼

來源:互聯網
上載者:User

--孔建軍(Kongove.CN)
2008.11.15

代碼閱讀工具簡介

對於學習Linux核心的人來說,原始碼的閱讀尤為重要。

因為所有設計思想、內部機制都是
以代碼的形式實現,所有的資料也都是為了更好的詮釋代碼。那麼一個好的閱讀工具,能
夠提高閱讀的效率和效果。常見的代碼閱讀工具有,Source Navigator、Source Insight
、lxr、Cscope、Kscope等。

 • "Source Navigator"是紅帽子公司的,以GNU GPL發布,可從官方網站[1]下載使用。
 • "Source Insight"目前只有Windows平台的,官方網站[2]。需要註冊才能使用,或者
從網上下載註冊機產生註冊碼。在Linux下通過wine類比雖然可以方便使用,但它畢竟
是Windows平台的東西,並不能很自由的使用。
 • lxr(linux cross reference)[3]為程式原始碼建立索引資料庫,利用perl指令碼CGI動態
產生包含源碼的web頁面,你可以用任何一種瀏覽器查閱。缺點是需要伺服器支援,還
有速度。
 • "Cscope"[4]為終端下的代碼閱讀工具,資源消耗少,對那些忠於命令列的行操作的人
,使用起來更加方便、靈活。這也是這篇文章推薦使用的一個重要原因。也有人把
Cscope和Emasc綁定閱讀源碼。當然工具的選取,也取決於個人習慣。

Vim+Ctags+Cscope

cscope的工作需要vim、ctags的配合,它們都是基於命令列的。在Ubuntu下,使用者只需執
行“sudo apt-get install cscope cscope-indexer ctags vim-full”即可完成軟體安裝。
下面只是給出了三種工具的常用方法,更多功能可查看man手冊,或者官方文檔。

Vim

vim被看作是專門為程式員打造的文字編輯器,其豐富的編輯命令都是常用的簡單字元,用
戶很容易上手。vim可對180多種語言的文法高亮,對C語言自動縮排,真則運算式字元匹配
尋找,功能強大,並支援多個作業系統平台。關於vim的使用,這裡不做講解。vim中文文
檔[5]。
在Ubuntu下預設安裝的vim,沒有文法加亮功能。所以需要安裝vim-full,並在vim 配置
檔案 ~/.vimrc中添加一行 "syntax on" 這樣在vim中開啟的源碼就有了文法高亮顯示。
vim內建了很多顏色主題,可以直接選取下面一行添加到vim設定檔當中,重新開啟vim即
可生效。

colorscheme elflord "我使用這個
colorscheme darkblue
colorscheme evening
colorscheme murphy
colorscheme torte
colorscheme desert

Ctags

在原始碼根目錄下執行 ctags -r 命令用來為程式原始碼產生標籤檔案,其-r選項表示遞
歸操作,同時為子目錄也產生標籤檔案。vim利用產生的標籤檔案,可以進行相應檢索、並
在不同的檔案C語言元素之間來回切換。

在vim中ctags的簡單使用
1) 跳轉到指定的函數進入vim後,用 “:tag func_name“ 跳到函數func_name處。使用tag
命令時,可以使用TAB鍵進行匹配尋找,繼續按TAB鍵向下切換。
某個函數有多個定義時

:tag
跳到第一個定義處,優先跳轉到當前檔案
:tnext
跳到第一個
:tfirst
跳到前count個
:[count]tprevious
跳到後count個
:[count]tnext
跳到最後一個
:tlast
你也可以在所有tagname中選擇:
:tselect tagname

如果想跳到包含block的標識符:“tag /block” 然後用TAB鍵來選擇。這裡'/'就是告訴vim
'block'是一個語句塊標籤。
2)用“CTRL + ]“快速鍵,跳轉到游標所在函數標識符的定義處。
3)使用“CTRL + T”退回上層。如果想在以write_開頭的標識符中選擇一下, :tselect /^
write_ 這裡,'^'表示開頭,同理,'$'表示末尾。多個同名的標識符

Cscope

運行cscope命令,出現兩個面板,上方是一個尋找結果的顯示面板,下方是一個尋找條件
指定面板。使用TAB鍵在兩個面板間切換,也可使用上下左右方向件和翻頁鍵在同一面板內
貼換位置。選中顯示面板的某個項,斷行符號即可進入該檔案,這是調用vim開啟檔案,這時就
可以結合ctags使用了。當然也可以直接使用vim開啟檔案,結合ctags閱讀源碼。
使用前,必須現使用“cscope-indexer -r”命令遞迴產生索引資訊檔。特殊情況下,還需
要使用者使用find命令,主動產生索引資訊檔,並指定給cscope工具。 cscope提供了如下
九種查詢方式:

Find this C symbol:
#尋找指定的C符號
Find this global definition:
#尋找指定的全域定義
Find functions called by this function:
#尋找指定函數調用的函數
Find functions calling this function:
#尋找調用指定函數的函數
Find this text string:
#尋找字串
Change this text string:
#修改指定字串
Find this egrep pattern:
#尋找匹配字元
Find this file:
#尋找指定檔案
Find files #including this file:
#指定引用標頭檔進行尋找

在對應某一項中輸入尋找條件,斷行符號即可進行查詢,並將結果顯示在顯示面板。

應用執行個體

下面以使用cscope閱讀核心原始碼為例:

$ wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.6.tar.bz2
#
從Linux核心官網下載核心原始碼
$ tar xvfj linux-2.6.27.6.tar.bz2
#解壓檔案
$ cd linux-2.6.27.6
#進入原始碼根目錄
$ ctags -R
#遞迴產生標籤檔案
$ cscope-indexer -r
#遞迴產生索引資訊檔
$ cscope
#使用cscope閱讀源碼

標籤檔案、索引資訊檔只需要第一次或者代碼發生變動時產生,以後使用直接運行
cscope即可。

[1] http://sourcenav.sourceforge.net/

[2] http://www.sourceinsight.com/

[3] http://lxr.linux.no/

[4] http://cscope.sourceforge.net/

[5] http://vcd.gro.clinux.org/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.