複製鏈接
請複製以下鏈接發送給好友

cscope

鎖定
Cscope 是一款開源免費的 C/C++瀏覽工具,自帶一個基於文本的用户界面,通過cscope可以很方便地找到某個函數或變量的定義位置、被調用的位置等信息。Cscope對 C /C++支持較好,也可以自己定製來支持Java和PerlPython等腳本語言。Vimgvim都提供了cscope接口,通過適當的配置,可以在Unix/Linux下實現變量、函數、文件等之間跳轉,就像Windows下的Source Insight一樣靈活易用。由於cscope是開源免費的,而且配合vim可以脱離鼠標,實現全鍵盤操作,方便快捷地瀏覽源代碼,深受程序員、Geek等人士的喜愛。
外文名
cscope
類    別
開源免費的C/C++瀏覽工具
基    於
文本用户界面
功    能
找到某個函數變量的定義位置

目錄

  1. 1 簡介
  2. 2 使用
  3. 安裝
  4. 配置
  5. 使用

cscope簡介

cscope 是一個 C語言的瀏覽工具,通過這個工具可以很方便地找到某個函數或變量的定義位置、被調用的位置等信息。目前支持 C 和 C++。cscope 自身帶一個基於文本的用户界面,不過 gvim 提供了cscope接口,因此可以在 gvim 中調用 cscope,方便快捷地瀏覽源代碼
Cscope是一個類似ctags的工具。 你可以把它想作是超過頻的ctags,因為它功能比ctags強大很多。 在 Vim裏,通過cscope查詢結果來跳轉就象跳轉到其他的標籤完全一樣;它被保存在標籤棧裏。這樣你就可以象使用tags一樣在函數等等之間便捷的跳轉。在VIM中使用cscope非常簡單,首先調用“cscope add”命令添加一個cscope數據庫,然後就可以調用“cscope find”命令進行查找了。VIM支持8種cscope的查詢功能,如下:例如,我們想在代碼中查找調用work()函數的函數,我們可以輸入:“:cs find c work”,回車後發現沒有找到匹配的功能,可能並沒有函數調用work()。我們再輸入“:cs find s work”,查找這個符號出現的位置,現在vim列出了這個符號出現的所有位置。我們還可以進行字符串查找,它會雙引號或單引號括起來的內容中查找。還可以輸入一個正則表達式,這類似於egrep程序的功能。

cscope使用

cscope安裝

2.1.1 軟件下載
下載地址 [1] 
2.1.2 軟件安裝:
./configure --with-flex (注:如果平台是Linux,最好帶上 --with-flex選項)
make (注:我沒有遇到錯誤)
make install (注: 直接安裝好了)
PS.在Ubuntu中打開終端使用命令行安裝再簡單不過: sudo apt-get install vim

cscope配置

vim 配置文件 vimrc. 你可以修改/etc/vimrc使所有用户都使用本配置文件,當然你還可以修改~/.vimrc 使僅對當前用户有效。下載配置文件:cscope_map.vim, 把cscope_map.vim裏從 if has("cscope") 到 endif裏邊的內容複製到/etc/vimrc裏邊去,裏邊的命令意思請看下邊文章 [2] 

cscope使用

2.3.1、建立cscope使用的索引文件
2.3.1.1 在你需要瀏覽源碼的根目錄下(如你想用cscope看linux源碼) 使用下面命令:
#: cscope -Rbkq<回車>
2.3.1.2 R 表示把所有子目錄裏的文件也建立索引
2.3.1.3 b 表示cscope不啓動自帶的用户界面,而僅僅建立符號數據庫
2.3.1.4 q 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
2.3.1.5 k 在生成索引文件時,不搜索/usr/include目錄
2.3.2、使用cs find 查找 [3]  (也可以簡化寫成 cs f)後面添加需要得字符串類型:
c:Find functions calling this function//查找調用本函數的函數
d:Find functions called by this function //查找本函數調用的函數
e:Find this egrep pattern//查找egrep模式,相當於egrep功能,但查找速度快多了
f:Find this file //查找並打開文件,類似vim的find功能
g:Find this definition//查找函數、宏、枚舉等定義的位置,類似ctags的功能
i:Find files #including this file //查找包含本文件的文件
s:Find this C symbol //查找C語言符號,即查找函數名、宏、枚舉值等出現的地方
t:Find assignments to //查找指定的字符串
例如:使用cscope查找do_fork函數的定義,在vim命令行下執行 :cs f g do_fork
2.3.2.3 上面所有命令也可以配合按鍵及來實現
2.3.2.3.1 Ctrl+\ 再按 s 表示 :cs find s命令
2.3.2.3.2同理實現cs find + g,d,c,t,e,f,i命令
2.3.2.4 Cscope_map.vim説明:
2.3.2.4.1、有英文註釋的我就不説明了,我就説一下里邊的鍵 map 映射
2.3.2.4.2、如: nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
2.3.2.4.2.1 nmap 表示在vim的普通模式下,即相對於:編輯模塊和可視模式,以下是幾種模式
:map 普通,可視模式及操作符等待模式
:vmap 可視模式
:omap 操作符等待模式
:map! 插入和命令行模式
:imap 插入模式
:cmap 命令行模式
2.3.2.4.2.2 <C-\>表示:Ctrl+\ s表示輸入(即按:s) s
2.3.2.4.2.3 : 表示輸入':'
2.3.2.4.2.4 “cs find s”表示輸入"cs find s"也即是要輸入的命令
2.3.2.4.2.5 <C-R>=expand("cword")總體是為了得到:光標下的變量或函數。cword 表示:cursor word, 類似的還有:cfile表示光標所在處的文件名吧
2.3.2.4.2.6 就是回車吧,不太清楚
參考資料