Linux下閱讀源碼工具

閒來無事,因而又想進到Linux內核裏面去逛逛了,可是隻裝了個ctags的工具,雖說它能夠在源碼中處處跳動查看代碼,可是感受應該會有更好的方法。php

       雖說能夠轉到windows下面去使用SourceInsight工具來閱讀源碼,可是對於咱們這種常用vim編輯器的人來講,仍是打算使用vim比較舒服一點,這也許是習慣了吧,再說系統切換也麻煩,也不喜歡使用虛擬機。因而找了些資料研究了下,原來只需幾個工具(插件)配合起來使用就很方便了,也能達到IDE的強大效果。數據庫

       我使用的系統是ubuntu10.04的,只須要3個工具就能夠輕鬆閱讀內核源代碼了,分別是: ctags、cscope、taglist ,下面就來看如何安裝使用他們吧。ubuntu

       1、安裝ctagsvim

       它在瀏覽代碼是很是方便,能夠在變量、函數定義之間來回的跳動,這些網上有不少介紹,這裏不囉嗦了。windows

       在終端中輸入: sudo apt-get install ctags 便可安裝ctags,若是沒有找到軟件包,還能夠輸入: sudo apt-get install exuberant-ctags ,若是仍是不行,那麼能夠到官網下載源碼來編譯安裝,安裝方法相信都會吧,也就是安裝軟件的三部曲:./configure 、make 、make installbash

       下載地址爲: http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz
編輯器

       完了之後,能夠測試下安裝是否成功,在終端運行: ctags --version ,若是打印出以下字符說明安裝正確:
函數

       安裝完成之後,進入到源代碼目錄中,終端輸入以下命令:ctags -R . ,將在當前目錄下生成文件 tags工具

       而後打開源文件,光標定位到函數或者宏名上,按Ctrl + ],就能夠跳轉到該函數或者宏的定義處,要想退回來則使用Ctrl + o 或者 Ctrl + t ,也能夠直接在終端輸入 vim -t 函數名,也能夠查看函數定義。測試

       2、安裝cscope插件

       在終端輸入如下命令:sudo apt-get install cscope 、若是不行,一樣能夠到官網下載源碼來自行安裝。

       下載地址爲:http://sourceforge.net/projects/cscope/files/

       使用方法:

       在終端下,切換到源碼所在目錄後,輸入命令: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 <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語言符號,即查找函數名、宏、枚舉值等出現的地方
                     :cs find g ---- 查找函數、宏、枚舉等定義的位置,相似ctags所提供的功能
                     :cs find d ---- 查找本函數調用的函數:cs find c ---- 查找調用本函數的函數
                     :cs find t: ---- 查找指定的字符串
                     :cs find e ---- 查找egrep模式,至關於egrep功能,但查找速度快多了
                     :cs find f ---- 查找並打開文件,相似vim的find功能
                     :cs find i ---- 查找包含本文件的文
       更多幫助在vim末行命令模式下輸入cs 或 cscope得到幫助信息。

       3、taglist插件

       不須要安裝,只須要簡單配置就能夠了,可是須要ctags的支持。

       下載地址爲:http://www.vim.org/scripts/download_script.php?src_id=7701

       下載完成後,解壓開壓縮文件有兩個目錄,plugin和doc ,分別將plugin目錄下的taglist.vim複製到~/.vim/plugin/下,將doc目錄下的taglist.txt文件複製到~/.vim/doc/下,這樣就能夠了。

       而後再將如下代碼加入到~/.vimrc配置文件中:

       " 按F8按鈕,在窗口的左側出現taglist的窗口,像vc的左側的workpace
       nnoremap <silent> <F8> :TlistToggle<CR><CR>
       " :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窗口中,還可使用下面的快捷鍵:

       <CR>          跳到光標下tag所定義的位置,用鼠標雙擊此tag功能也同樣
       o             在一個新打開的窗口中顯示光標下tag
       <Space>       顯示光標下tag的原型定義
       u             更新taglist窗口中的tag
       s             更改排序方式,在按名字排序和按出現順序排序間切換
       x             taglist窗口放大和縮小,方便查看較長的tag
       +             打開一個摺疊,同zo
       -             將tag摺疊起來,同zc
       *             打開全部的摺疊,同zR
       =             將全部tag摺疊起來,同zM
       [[            跳到前一個文件
       ]]            跳到後一個文件
       q             關閉taglist窗口
       <F1>          顯示幫助
       能夠用「:TlistOpen」打開taglist窗口,用「:TlistClose」關閉taglist窗口。或者使用「:TlistToggle」在打開和關閉間切換。

       4、如今都安裝完畢了,能夠寫一個小的腳本文件來創建索引

       例如名字就叫做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 便可生成索引並使用了

相關文章
相關標籤/搜索