cscope 是一個C 語言的瀏覽工具,通過這個工具可以很方便地找到某個函數或變量的定義位置、被調用的位置等信息。目前支持 C 和 C++。
一、Cscope簡介
cscope 是一個 C 語言的瀏覽工具,通過這個工具可以很方便地找到某個函數或變量的定義位置、被調用的位置等信息。目前支持 C 和 C++。cscope 自身帶一個基于文本的用戶界面,不過 gvim 提供了cscope接口,因此可以在 gvim 中調用 cscope,方便快捷地瀏覽源代碼。
Cscope是一個類似ctags的工具。你可以把它想作是超過頻的ctags,因為它功能比ctags強大很多。在 VIM里,通過cscope查詢結果來跳轉就象跳轉到其他的標簽完全一樣;它被保存在標簽棧里。這樣你就可以象使用tags一樣在函數等等之間便捷的跳轉。在VIM中使用cscope非常簡單,首先調用“cscopeadd”命令添加一個cscope數據庫,然后就可以調用“cscopefind”命令進行查找了。VIM支持8種cscope的查詢功能,如下:例如,我們想在代碼中查找調用work()函數的函數,我們可以輸入:“:csfind c work”,回車后發現沒有找到匹配的功能,可能并沒有函數調用work()。我們再輸入“:csfind swork”,查找這個符號出現的位置,現在VIM列出了這個符號出現的所有位置。我們還可以進行字符串查找,它會雙引號或單引號括起來的內容中查找。還可以輸入一個正則表達式,這類似于egrep程序的功能。
二、Cscope 使用
2.1、Cscope安裝
2.1.1 軟件下載
下載地址
2.1.2 軟件安裝:
./configure --with-flex (注:如果平臺是Linux,最好帶上 --with-flex選項)
make (注:我沒有遇到錯誤)
make install (注:直接安裝好了)
PS.在Ubuntu中打開終端使用命令行安裝再簡單不過: sudo APT install vim
2.2、Cscope配置
VIM 配置文件 vimrc. 你可以修改/etc/vimrc使用所有用戶都使用本配置文件,當然你還可以修改~/.vimrc 下載配置文件:cscope_map.vim 把cscope_map.vim里從 if has("cscope") 到 endif里邊的內容復制到/etc/vimrc里邊去里邊的命令意思請看下邊文章
2.3、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 查找(也可以簡化寫成 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.3上面所有命令也可以配合按鍵及來實現
2.3.2.3.1 Ctrl+\ 再按 s 表示:cs find s命令
2.3.1.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
2.3.2.4.2.1 nmap 表示在VIM的普通模式下,即相對于:編輯模塊和可視模式,以下是幾種模式
:map 普通,可視模式及操作符等待模式
:vmap 可視模式
:omap 操作符等待模式
:map! 插入和命令行模式
:imap 插入模式
:cmap 命令行模式
2.3.2.4.2.2
2.3.2.4.2.3 : 表示輸入':'
2.3.2.4.2.4 “cs find s"表示輸入"cs find s"也即是要輸入的命令
2.3.2.4.2.5
2.3.2.4.2.6 就是回車吧,不太清楚
參考資料 >