vim cscope的使用閱讀源碼

來源:互聯網
上載者:User
這下更厲害了, 用Cscope自己的話說 - "你可以把它當做是超過頻的ctags", 其功能和強大程度可見一斑吧, 關於它的介紹我就不詳細說了, 如果你安裝好了前文介紹的中文協助手冊, 用下面的命令看看介紹吧:
:help if_cscop.txt

我在這裡簡單摘抄一點, 供還在猶豫的朋友看看:
Cscope 是一個互動螢幕下使用的工具,用來協助你:
* 無須在厚厚的程式清單中翻來翻去就可以認識一個 C 程式的工作原理。
* 無須熟悉整個程式就可以知道清楚程式 bug 所要修改的代碼位置。
* 檢查提議的改動 (如添加一個枚舉值) 可能會產生的效果。
* 驗證所有的源檔案都已經作了需要的修改;例如給某一個現存的函數添加一個參數。
* 在所有相關的源檔案中對一個全域變數改名。
* 在所有相關的位置將一個常數改為一個預先處理符號。

它被設計用來回答以下的問題:
* 什麼地方用到了這個符號?
* 這是在什麼地方定義的?
* 這個變數在哪裡被賦值?
* 這個全域符號的定義在哪裡?
* 這個函數在源檔案中的哪個地方?
* 哪些函數調用了這個函數?
* 這個函數調用了哪些函數?
* 資訊 "out of space" 從哪來?
* 這個源檔案在整個目錄結構中處於什麼位置?
* 哪些檔案包含這個標頭檔?

安裝Cscope:
如果你的系統中有cscope命令, 則可以跳過這一小段, 如果沒有, 就先跟著我一起安裝一個吧.
在Cscope的首頁: http://cscope.sourceforge.net 下載一個源碼包, 解壓後編譯安裝:

# ./configure
# make
# make install       // 需要root許可權

先在~/vimrc中增加一句:

:set cscopequickfix=s-,c-,d-,i-,t-,e-

這個是設定是否使用 quickfix 視窗來顯示 cscope 結果, 用法在後面會說到。

跟Ctags一樣, 要使用其功能必須先為你的代碼產生一個cscope的資料庫, 在項目的根目錄運行下面的命令:

$ cd /home/wooin/vim71/
$ cscope -Rbq
# 此後會產生三個檔案
$ ll cscope.*
-rw-rw-r-- 1 wooin wooin 1.1M 2007-09-30 10:56 cscope.in.out
-rw-rw-r-- 1 wooin wooin 6.7M 2007-09-30 10:56 cscope.out
-rw-rw-r-- 1 wooin wooin 5.1M 2007-09-30 10:56 cscope.po.out
# 開啟檔案, 開始Coding
$ cd src
$ vi main.c

進入vim後第一件事是要把剛才產生的cscope檔案匯入到vim中來, 用下面的命令:

:cs add /home/wooin/vim71/cscope.out /home/wooin/vim71

上面這條命令很重要, 必須寫全, 不能唯寫前半句:
:cs add /home/wooin/vim71/cscope.out
因為源碼是多級目錄的, 如果這樣寫, cscope是無法在子目錄中的源碼中工作的, 當然, 如果你的源碼都在同一級目錄中就無所謂了. 如果你要經常用cscope的話, 可以把上面那句加到~/.vimrc中去.

下面我們來操練一下, 尋找函數vim_strsave()的定義, 用命令:

:cs find g vim_strsave

如:

(--- 圖8 ---)
按下斷行符號後會自動跳轉到vim_strsave()的定義處. 此時你肯定會說Ctags也可以做到這個呀, 那麼下面說的這個Ctags就無法做到了, 我想尋找vim_strsave()到底在那些地方被調用過了, 用命令:

:cs find c vim_strsave

按下斷行符號後vim會自動跳轉到第一個符合要求的地方, 並且在命令欄顯示有多少符合要求的結果, :

(--- 圖9 ---)
如果自動跳轉的位置你不滿意, 想看其他的結果, 可以用下面的命令開啟QuickFix視窗:

:cw

:

(--- 圖10 ---)
這時你就可以慢慢挑選了^_^

cscope的主要功能是通過同的子命令"find"來實現的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name

0 或 s 尋找本 C 符號(可以跳過注釋)
1 或 g 尋找本定義
2 或 d 尋找本函數調用的函數
3 或 c 尋找調用本函數的函數
4 或 t 尋找本字串
6 或 e 尋找本 egrep 模式
7 或 f 尋找本檔案
8 或 i 尋找包含本檔案的檔案

如果每次尋找都要輸入一長串命令的話還真是件討人厭的事情, Cscope的協助手冊中推薦了一些快速鍵的用法, 下面是其中一組, 也是我用的, 將下面的內容添加到~/.vimrc中, 並重啟vim:

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>

當游標停在某個你要尋找的詞上時, 按下<C-_>g, 就是尋找該對象的定義, 其他的同理.
按這種按鍵組合有一點技巧,按了<C-_>後要馬上按下一個鍵,否則螢幕一閃就回到nomal狀態了
<C-_>g的按法是先按"Ctrl+Shift+-", 然後很快再按"g"

很奇怪, 其中的這句:
nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
在我的vim中無法工作, 但是我改成:
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
就可以正常工作了, 不知道是什麼原因? 有哪位朋友知道請告訴我.

cscope的其他功能你可以通過協助手冊自己慢慢學習

原文地址:http://hi.baidu.com/bali5/blog/item/49ff3517c0997a01c83d6d4e.html

相關文章

聯繫我們

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