Linux下阅读源码工具
閑來(lái)無(wú)事,于是又想進(jìn)到Linux內(nèi)核里面去逛逛了,但是只裝了個(gè)ctags的工具,雖然說(shuō)它可以在源碼中到處跳動(dòng)查看代碼,但是感覺(jué)應(yīng)該會(huì)有更好的方法。
?????? 雖然說(shuō)可以轉(zhuǎn)到windows下面去使用SourceInsight工具來(lái)閱讀源碼,但是對(duì)于我們這種經(jīng)常使用vim編輯器的人來(lái)說(shuō),還是打算使用vim比較舒服一點(diǎn),這也許是習(xí)慣了吧,再說(shuō)系統(tǒng)切換也麻煩,也不喜歡使用虛擬機(jī)。于是找了些資料研究了下,原來(lái)只需幾個(gè)工具(插件)配合起來(lái)使用就很方便了,也能達(dá)到IDE的強(qiáng)大效果。
?????? 我使用的系統(tǒng)是ubuntu10.04的,只需要3個(gè)工具就可以輕松閱讀內(nèi)核源代碼了,分別是: ctags、cscope、taglist ,下面就來(lái)看如何安裝使用他們吧。
?????? 一、安裝ctags
?????? 它在瀏覽代碼是非常方便,可以在變量、函數(shù)定義之間來(lái)回的跳動(dòng),這些網(wǎng)上有很多介紹,這里不啰嗦了。
?????? 在終端中輸入: sudo apt-get install ctags 即可安裝ctags,如果沒(méi)有找到軟件包,還可以輸入: sudo apt-get install exuberant-ctags ,如果還是不行,那么可以到官網(wǎng)下載源碼來(lái)編譯安裝,安裝方法相信都會(huì)吧,也就是安裝軟件的三部曲:./configure 、make 、make install 。
?????? 下載地址為: http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz
?????? 完了以后,可以測(cè)試下安裝是否成功,在終端運(yùn)行: ctags --version ,如果打印出如下字符說(shuō)明安裝正確:
?????? 安裝完成以后,進(jìn)入到源代碼目錄中,終端輸入如下命令:ctags -R . ,將在當(dāng)前目錄下生成文件 tags
?????? 然后打開(kāi)源文件,光標(biāo)定位到函數(shù)或者宏名上,按Ctrl + ],就可以跳轉(zhuǎn)到該函數(shù)或者宏的定義處,要想退回來(lái)則使用Ctrl + o 或者 Ctrl + t ,也可以直接在終端輸入 vim -t 函數(shù)名,也可以查看函數(shù)定義。
?????? 二、安裝cscope插件
?????? 在終端輸入以下命令:sudo apt-get install cscope 、如果不行,同樣可以到官網(wǎng)下載源碼來(lái)自行安裝。
?????? 下載地址為:http://sourceforge.net/projects/cscope/files/
???????使用方法:
?????? 在終端下,切換到源碼所在目錄后,輸入命令:cscope -Rbkq
?????? 參數(shù)意義:R 表示把所有子目錄里的文件建立索引
???????????????????????? b 表示僅建立符號(hào)數(shù)據(jù)庫(kù),不啟動(dòng)自帶的用戶(hù)界面
???????????????????????? k 表示在生成索引時(shí),不搜索/usr/include/目錄
???????????????????????? q 表示生成cscope.in.out 和 cscope.po.out文件,加快cscope的索引速度
?????? 完成后將在當(dāng)前目錄生成這么幾個(gè)文件:cscope.in.out 、cscope.po.out 和 cscope.out
?????? 修改~/.vimrc配置文件,在文件中加入如下代碼:
?????? if filereadable("cscope.out")
??????????????? cs add cscope.out
?????? endif
?????? 這樣做的目的是為了在每次使用vim打開(kāi)文件是都輸入命令?? :cs add cscope.out
?????? 如果想使用快捷鍵進(jìn)行快捷查找的話,那么需要在~/.vimrc文件中加入如下代碼:
?????? if has("cscope") ?????????????? set cscopetag ? " 使支持用 Ctrl+] ?和 Ctrl+t 快捷鍵在代碼間跳來(lái)跳去 ? ? ? ? ? ???? "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 <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> ?????? endif ?????? 常用的命令: ???????????????????? :cs find s ---- 查找C語(yǔ)言符號(hào),即查找函數(shù)名、宏、枚舉值等出現(xiàn)的地方 ???????????????????? :cs find g ---- 查找函數(shù)、宏、枚舉等定義的位置,類(lèi)似ctags所提供的功能 ???????????????????? :cs find d ---- 查找本函數(shù)調(diào)用的函數(shù):cs find c ---- 查找調(diào)用本函數(shù)的函數(shù) ???????????????????? :cs find t: ---- 查找指定的字符串 ???????????????????? :cs find e ---- 查找egrep模式,相當(dāng)于egrep功能,但查找速度快多了 ?????????????????????:cs find f ---- 查找并打開(kāi)文件,類(lèi)似vim的find功能 ???????????????????? :cs find i ---- 查找包含本文件的文 ?????? 更多幫助在vim末行命令模式下輸入cs 或 cscope獲得幫助信息。???????三、taglist插件
?????? 不需要安裝,只需要簡(jiǎn)單配置就可以了,但是需要ctags的支持。
?????? 下載地址為:http://www.vim.org/scripts/download_script.php?src_id=7701
?????? 下載完成后,解壓開(kāi)壓縮文件有兩個(gè)目錄,plugin和doc ,分別將plugin目錄下的taglist.vim復(fù)制到~/.vim/plugin/下,將doc目錄下的taglist.txt文件復(fù)制到~/.vim/doc/下,這樣就可以了。
?????? 然后再將以下代碼加入到~/.vimrc配置文件中:
?????? " 按F8按鈕,在窗口的左側(cè)出現(xiàn)taglist的窗口,像vc的左側(cè)的workpace ?????? nnoremap <silent> <F8> :TlistToggle<CR><CR> ?????? " :Tlist ? ? ? ? ? ? ?調(diào)用TagList ?????? let Tlist_Show_One_File=0 ? ? ? ? ? ? ? ? ? ?" 只顯示當(dāng)前文件的tags ?????? let Tlist_Exit_OnlyWindow=1 ? ? ? ? ? ? ? ? ?" 如果Taglist窗口是最后一個(gè)窗口則退出Vim ?????? let Tlist_Use_Right_Window=1 ? ? ? ? ? ? ? ? " 在右側(cè)窗口中顯示 ?????? let Tlist_File_Fold_Auto_Close=1 ? ? ? ? ? ? " 自動(dòng)折疊 ?????? 配置完成以后,按F8試試就可以看到效果了,直接用鼠標(biāo)就能操作。? ???? 在taglist窗口中,還可以使用下面的快捷鍵:
?????? <CR>????????? 跳到光標(biāo)下tag所定義的位置,用鼠標(biāo)雙擊此tag功能也一樣
?????? o???????????? 在一個(gè)新打開(kāi)的窗口中顯示光標(biāo)下tag
?????? <Space>?????? 顯示光標(biāo)下tag的原型定義
?????? u???????????? 更新taglist窗口中的tag
?????? s???????????? 更改排序方式,在按名字排序和按出現(xiàn)順序排序間切換
?????? x???????????? taglist窗口放大和縮小,方便查看較長(zhǎng)的tag
?????? +???????????? 打開(kāi)一個(gè)折疊,同zo
?????? -???????????? 將tag折疊起來(lái),同zc
?????? *???????????? 打開(kāi)所有的折疊,同zR
?????? =???????????? 將所有tag折疊起來(lái),同zM
?????? [[??????????? 跳到前一個(gè)文件
?????? ]]??????????? 跳到后一個(gè)文件
?????? q???????????? 關(guān)閉taglist窗口
?????? <F1>????????? 顯示幫助
?????? 可以用“:TlistOpen”打開(kāi)taglist窗口,用“:TlistClose”關(guān)閉taglist窗口。或者使用“:TlistToggle”在打開(kāi)和關(guān)閉間切換。
?????? 四、現(xiàn)在都安裝完畢了,可以寫(xiě)一個(gè)小的腳本文件來(lái)建立索引
?????? 例如名字就叫作cscope.sh,在里面加入以下內(nèi)容:
?????? #!/bin/bash
?????? find . -name *.h >> cscope.files
?????? find . -name *.c >> cscope.files
?????? find . -name *.cpp >> cscope.files
?????? cscope -Rbkq -i cscope.files
?????? ctags -R .
?????? 保存退出,如果還需要加入更多的文件,則繼續(xù) find 即可
?????? 修改文件權(quán)限:chmod a+x cscope.sh ,可以將這個(gè)腳本放到/bin/目錄下
?????? 切換到源代碼目錄,執(zhí)行 cscope.sh 即可生成索引并使用了
轉(zhuǎn)載于:https://www.cnblogs.com/wangzhe1635/p/9025711.html
總結(jié)
以上是生活随笔為你收集整理的Linux下阅读源码工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分布式锁 基于Redis
- 下一篇: Linux下 执行程序