小時候寫的程式都是用一個cpp檔就把全部程式碼塞進去的程式,
年紀大一點,接觸了一些大型的project之後,才逐漸發現世界不是一個cpp檔構成的。
但在混亂的標頭檔、cpp檔中想理出一番頭緒,
還真的要有一些工具的幫助,在些介紹cscope+vim的組合。
有用過unix-like系統的都知道,vim是一個強大又仁慈的編輯器。
cscope是一個將程式碼中的symbol建成database,以便於trace程式碼的工具。
兩者都是發源自unix系統的應用程式。
然而,我慣用的環境還是windows,所以今天就來研究一下如果在windows上使用它們。
1. 安裝gvim portable
下載gvim portable並解壓縮。(請到此下載 => Downloads )
portable,顧名思義,資料夾下的gvimportable.exe是可以直接執行的,
請把它改名為vi.exe,並把此資料夾加入Path環境變數中
(因為cscope在開啟檔案時會使用 vi)
2. 安裝cscope
a) 由於cscope的官網上並沒有可以直接執行的binary,
即使你想抓source回來compile也需要安裝cygwin
google "cscope mingw"一下後發現已經有人成功地做出binary了,
所以就直接下載cscope15.6-win32回來用吧!
解壓縮完後記得把資料夾的路徑加入Path。
b) 參考cscope官網的tutorial,下載cscope_maps.vim
將其放置於GVimPortable\App\vim\vim70\plugin 下
這個檔是定義一些key map,以便於在vim中快速地呼叫cscope
3. 使用方法
1) 單獨使用cscope
首先,請用開始->執行->cmd開出console
cscope的執行很簡單。但在執行之前要先定義一下TMPDIR這個環境變數
(因為windows下沒有 /tmp),把它設為你的暫存資料夾。
接著切換到程式碼的最上層目錄,
鍵入 cscope -R (-R代表會搜尋子目錄),它便會出現一個query的介面,
同時,它也會在目前的目錄下建立symbol的database (cscope.out)。
用上下左右鍵移動到 "Find this c symbol: "
鍵入你要搜尋的關鍵字即可。
搜尋結果會列出所有出現該關鍵字的檔案/行號,
你可以用上下鍵來選擇你想檢視的檔案/行號,按下Enter鍵後就會出現gvim的視窗。
(最好一次只開一個vim視窗)
若你需要再次搜尋不同的關鍵字,只需要按下tab,游標就會移到視窗的下半部。
按下?則會有使用說明;若要離開則按Ctrl+D。
2) 在vim中使用cscope
-自行鍵入關鍵字
在vim中可以用 :cs f s keyword 來搜尋 keyword
(cs -> cscope, f -> find, s -> symbol )
但此步驟前,vim會去讀取目前目錄下的cscope.out,若讀不到就會發生錯誤。
因此最好不要直接用vim去開啟某個.c檔,
而應該用上面 cscope -R -> Find this c symbol的方式來間接開啟vim,
這樣才不會因為你切換到子目錄下而找不到位於最上層的cscope.out。
-以游標所在的位置為symbol關鍵字
按下 Ctrl+'\' 後再按 s
-以游標所在的位置為function關鍵字 (搜尋這個function在那些地方被呼叫)
按下 Ctrl+'\' 後再按 c
-以游標所在的位置為file關鍵字 (搜尋檔案名稱中含有該關鍵字的檔案)
按下 Ctrl+'\' 後再按 f
此外,在某個symbol上按下Ctrl+ ']'
可以直接跳到該symbol的定義處;
若要返回則可以按 Ctrl+ 't' 。
(註: Ctrl+ 'o' 是返回上一個跳躍處)
要特別注意的是,cscope只認得 .c 檔
因此如果你的source是.cpp 或.java,
那你必須用以下的方式:
1) find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files
2) cscope -i cscope.files
至於windows的find.exe要去那裡生,就請大家自己想辦法囉。
另外,如果要確定自己的gvim版本是有支援可以在vim下鍵入 ":version"
來確定一下是不是有 "+cscope" 這一段文字。
沒有留言:
張貼留言