閒來無事,於是又想進到linux核心裡面去逛逛了,但是只裝了個ctags的工具,雖然說它可以在原始碼中到處跳動檢視**,但是感覺應該會有更好的方法。
雖然說可以轉到windows下面去使用sourceinsight工具來閱讀原始碼,但是對於我們這種經常使用vim編輯器的人來說,還是打算使用vim比較舒服一點,這也許是習慣了吧,再說系統切換也麻煩,也不喜歡使用虛擬機器。於是找了些資料研究了下,原來只需幾個工具(外掛程式)配合起來使用就很方便了,也能達到ide的強大效果。
ctags、cscope、taglist
,下面就來看如何安裝使用他們吧。
一、安裝ctags
它在瀏覽**是非常方便,可以在變數、函式定義之間來回的跳動,這些網上有很多介紹,這裡不囉嗦了。
在終端中輸入: sudo apt-get install ctags 即可安裝ctag
s,如果沒有找到軟體包,還可以輸入:sudo
./configure 、make 、make install。
完了以後,可以測試下安裝是否成功,在終端執行:
ctags --version
,如果列印出如下字元說明安裝正確:
安裝完成以後,進入到源**目錄中,終端輸入如下命令:
ctags -r .
,將在當前目錄下生成檔案
br#ctrl + ]
,就可以跳轉到該函式或者巨集的定義處,要想退回來則使用
ctrl + o
或者ctrl + t
,也可以直接在終端輸入
vim -t 函式名
,也可以檢視函式定義。
二、安裝cscope外掛程式
在終端輸入以下命令:
sudo apt-get install cscope
使用方法:
在終端下,切換到原始碼所在目錄後,輸入命令:cscope -rbkq
引數意義:r 表示把所有子目錄裡的檔案建立索引
b 表示僅建立符號資料庫,不啟動自帶的使用者介面
k 表示在生成索引時,不搜尋/usr/include/目錄
q 表示生成cscope.in.out 和 cscope.po.out檔案,加快cscope的索引速度
完成後將在當前目錄生成這麼幾個檔案:cscope.in.out 、cscope.po.out 和 cscope.out
修改~/.vimrc
配置檔案,在檔案中加入如下**:
if filereadable("cscope.out")
cs add cscope.out
endif
這樣做的目的是為了在每次使用vim開啟檔案是都輸入命令 :cs add cscope.out
如果想使用快捷鍵進行快捷查詢的話,那麼需要在~/.vimrc
檔案中加入如下**:
if has("cscope")
set cscopetag " 使支援用 ctrl+] 和 ctrl+t 快捷鍵在**間跳來跳去
"check cscope for definition of a symbol before checking ctags:
"set to 1 if you want the reverse search order.
set csto=1
" add any cscope database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add the database pointed to by environment variable
elseif $cscope_db !=""
cs add $cscope_db
endif
" show msg when any other cscope db added
set cscopeverbose
nmap s :cs find s =expand("")
nmap g :cs find g =expand("")
nmap c :cs find c =expand("")
nmap t :cs find t =expand("")
nmap e :cs find e =expand("")
nmap f :cs find f =expand("")
nmap i :cs find i ^=expand("")$
nmap d :cs find d =expand("")
endif
常用的命令:
:cs find s ---- 查詢c語言符號,即查詢函式名、巨集、列舉值等出現的地方
:cs find g ---- 查詢函式、巨集、列舉等定義的位置,類似ctags所提供的功能
:cs find d ---- 查詢本函式呼叫的函式:cs find c ---- 查詢呼叫本函式的函式
:cs find t: ---- 查詢指定的字串
:cs find e ---- 查詢egrep模式,相當於egrep功能,但查詢速度快多了
:cs find f ---- 查詢並開啟檔案,類似vim的find功能
更多幫助在vim末行命令模式下輸入cs 或 cscope獲得幫助資訊。
三、taglist外掛程式
不需要安裝,只需要簡單配置就可以了,但是需要ctags的支援。
taglist.vim
複製到~/.vim/plugin/下,將doc目錄下的
taglist.txt
檔案複製到~/.vim/doc/下,這樣就可以了。
然後再將以下**加入到
~/.vimrc
配置檔案中:
" 按f8按鈕,在視窗的左側出現taglist的視窗,像vc的左側的workpace
nnoremap :tlisttoggle
" :tlist 呼叫taglist
let tlist_show_one_file=0 " 只顯示當前檔案的tags
let tlist_exit_onlywindow=1 " 如果taglist視窗是最後乙個視窗則退出vim
let tlist_use_right_window=1 " 在右側視窗中顯示
let tlist_file_fold_auto_close=1 " 自動摺疊
配置完成以後,
按f8試試就可以看到效果了,直接用滑鼠就能操作。
在taglist視窗中,還可以使用下面的快捷鍵:
跳到游標下tag所定義的位置,用滑鼠雙擊此tag功能也一樣
o 在乙個新開啟的視窗中顯示游標下tag
顯示游標下tag的原型定義
u 更新taglist視窗中的tag
s 更改排序方式,在按名字排序和按出現順序排序間切換
x taglist視窗放大和縮小,方便檢視較長的tag
+ 開啟乙個摺疊,同zo
- 將tag摺疊起來,同zc
* 開啟所有的摺疊,同zr
= 將所有tag摺疊起來,同zm
[[ 跳到前乙個檔案
]] 跳到後乙個檔案
q 關閉taglist視窗
顯示幫助
可以用「:tlistopen」開啟taglist視窗,用「:tlistclose」關閉taglist視窗。或者使用「:tlisttoggle」在開啟和關閉間切換。
四、現在都安裝完畢了,可以寫乙個小的指令碼檔案來建立索引
例如名字就叫作cscope.sh,在裡面加入以下內容:
#!/bin/bash
find . -name *.h >> cscope.files
find . -name *.c >> cscope.files
find . -name *.cpp >> cscope.files
cscope -rbkq -i cscope.files
ctags -r .
儲存退出,如果還需要加入更多的檔案,則繼續 find 即可
修改檔案許可權:
chmod a+x cscope.sh
,可以將這個指令碼放到/bin/目錄下
切換到源**目錄,執行 cscope.sh 即可生成索引並使用了
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
Linux下原始碼閱讀工具ctags的安裝及使用
解壓安裝包ctags 5.5.tar 進入ctags 5.5 執行 configure make sudo make install 在你需要檢視的源目錄下執行 ctags r ctags的使用 vim c h的檔案 tags 檔案中包括這些物件的列表 用 define定義的巨集 列舉型變數的值 函...
linux原始碼閱讀整理
from 由於作業系統的核心貼近硬體,需要對計算機的體系結構有所了解,例如cpu的工作原理 介面特性和bios呼叫等。讀者千萬別因為這些望而卻步,這裡將介紹一些閱讀linux核心原始碼必備的技能。獲取核心 目錄結構 在閱讀原始碼之前,還應知道linux核心原始碼的整體分布情況。現代的作業系統一般由程...