Linux下閱讀原始碼工具

2022-03-10 21:52:49 字數 4294 閱讀 4471

閒來無事,於是又想進到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核心原始碼的整體分布情況。現代的作業系統一般由程...