Search Google

Monday, June 09, 2008

Browse/Trace Code With Vim And Cscope

我們在6/3介紹使用網頁介面的cross reference trace Linux source code[1],該方法為cross reference建立資料庫時需要大量的時間(動輒數小時),如果想要在短時間內即可開始trace code,可以考慮採用tags系統的trace code方式。本篇要介紹的cscope[2]理念上延續ctags[3]使用tags方式在原始碼中搜尋關鍵字或函式的definition。如果同樣 一個definition出現在兩個以上的檔案中,ctags[3]預設直接開啟第一個檔案,如果遇到如Linux kernel針對許多部同硬體架構撰寫的原始碼,ctags[3]搜尋到的第一個match不一定是我們需要的檔案,這個部份cscope[2]則以提供 match清單的方式供使用者選擇該開啟哪個match所對應的檔案。採用cscope的另一個原因是它與編輯器vim搭配良好,操作起來十分順手。

以下為使用vim + cscope trace code的簡易範例。
1) 安裝vim與cscope套件:
$ sudo aptitude install vim vim-common vim-runtime cscope
2) 建立tags:
$ cd ~/src/linux-source/v2.6.24.3
$ cscope -bkqRU

3) 修改vim設定內容:
$ vim ~/.vimrc
在檔案最後加上以下內容:
set cscopetag
cscope add cscope.out
存檔後離開vim編輯器
4) 開始trace code
在Linux source的最頂層目錄,也就是此範例的~/src/linux-source/v2.6.24.3中啟動vim輸入:
:cs find g start_kernel
便會得到一個清單,此時從清單中挑選正確的match(取決於硬體架構,編譯核心時的define值等等),如下圖:
假設我們有興趣的match為init/main.c,輸入4之後vim便會開啟相對應的檔案並且自動將由標移至函式開頭,
此時我們就可以開始trace code,畫面如下圖。
在trace code的過程中如果對某個變數或函式感到興趣,可以使用"ctrl+]"的組合鍵取得另一份供我們選擇檔案的清單,等我們看完之後可以使 用"ctrl+t"的組合鍵回到原來的檔案繼續檢視start_kernel函式的內容。當"ctrl+]"無法找到你感興趣的關鍵字時,可以使 用":cs find"指令進行搜尋,使用":cs help"可以查閱
cscope在vim環境中所支援的搜尋指令,如下圖:


[1] http://memyselfandtaco.blogspot.com/2008/06/technical-writings-rule-of-thumb-local.html
[2] http://cscope.sourceforge.net/
[3] http://ctags.sourceforge.net/whatis.html

No comments: