<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 189,comments - 115,trackbacks - 0
    vim+ctags+cscope 打造Android源碼閱讀工具
    http://hi.baidu.com/snownight/blog/item/2f6e6327fe8e0210918f9d94.html
    vim+ctags+cscope 打造Android源碼閱讀工具
    2011-02-17 10:11

    1. 在Android源碼頂層目錄下運行ctags -R 生成tags文件

    2. 在Android源碼頂層目錄運行cscope -Rbq,生成cscope.out文件

    3.修改~/.vimrc使之可以自動加載tags和cscope.out文件,注意要使用ctags和cscope數(shù)據(jù)庫,必須在android源碼頂層運行vim程序

    我的.vimrc如下:

    "開關(guān)tag窗口

    nnoremap <silent> <F8> :TlistToggle<CR>

     

    "使用右側(cè)tag窗口

    "let Tlist_Use_Right_Window=1

     

    "一般設(shè)置.

    "set nocompatible "VIM而不是VI

    set history=50 "歷史記錄50條

    set fenc=utf-8 "設(shè)置默認(rèn)語言為8位unicode

    "man Q gq "屏蔽Q, 以免進(jìn)入Ex模式

    filetype on "打開文件類型檢測

     

    "

    ""顏色設(shè)置.

    colorscheme delek "主題

    "colorscheme evening "主題

    syntax on "語法高亮

    "set hls " 查找文本高亮

     

    "界面設(shè)置.

    set ruler "顯示當(dāng)前位置

    set number "顯示行號

    ""set nonumber "不顯示行號

     

    "格式設(shè)置.

    set autoindent "自動縮進(jìn)

    set smartindent "智能縮進(jìn)

    set cindent "C縮進(jìn)

    set tabstop=4 "硬TAB

    set softtabstop=4 "軟TAB

    set shiftwidth=4 "縮進(jìn)空格數(shù)

    set expandtab "空格替換TAB

    "set smarttab "智能TAB

    "

    set showmatch "顯示匹配

    "set matchtime=5 "1/10秒延遲

    "set hlsearch "高亮搜索

    "set incsearch "搜索中匹配

    set tags=tags; "ctags

    "set autochdir "ctags

     

    4.但是這樣有個問題就是每次必須從android頂層運行vim,從子目錄中運行ctags和cscope無法正常使用。因此我寫了一個腳本,用來解決這個問題

    #! /bin/bash 

    i=`pwd` 

    cd ~/source/unicore_src 

    vim $i/$1 $2 $3 

    cd $i

    保存成mvim可執(zhí)行文件,放到PATH環(huán)境變量中,就可以在子目錄中通過mvim來打開android源碼,并進(jìn)行各種跳轉(zhuǎn)了。

    使用cscope的最大好處是可以替代source insight的功能,并可以快速定位某個函數(shù)在哪些地方被調(diào)用,非常方便




    使用Vim+Ctags+Cscope閱讀源代碼


    http://www.man.lupaworld.com/thread-49968-1-1.html
    代碼閱讀工具簡介

    對于學(xué)習(xí)Linux內(nèi)核的人來說,源代碼的閱讀尤為重要。因為所有設(shè)計思想、內(nèi)部機(jī)制都是
    以代碼的形式實現(xiàn),所有的資料也都是為了更好的詮釋代碼。那么一個好的閱讀工具,能
    夠提高閱讀的效率和效果。常見的代碼閱讀工具有,Source Navigator、Source Insight
    、lxr、Cscope、Kscope等。

      • &amp;quot;Source Navigator&amp;quot;是紅帽子公司的,以GNU GPL發(fā)布,可從官方網(wǎng)站[1]下載使用。
      • &amp;quot;Source Insight&amp;quot;目前只有Windows平臺的,官方網(wǎng)站[2]。需要注冊才能使用,或者
        從網(wǎng)上下載注冊機(jī)生成注冊碼。在Linux下通過wine模擬雖然可以方便使用,但它畢竟
        是Windows平臺的東西,并不能很自由的使用。
      • lxr(linux cross reference)[3]為程序源代碼建立索引數(shù)據(jù)庫,利用perl腳本CGI動態(tài)
        生成包含源碼的web頁面,你可以用任何一種瀏覽器查閱。缺點是需要服務(wù)器支持,還
        有速度。
      • &amp;quot;Cscope&amp;quot;[4]為終端下的代碼閱讀工具,資源消耗少,對那些忠于命令行的行操作的人
        ,使用起來更加方便、靈活。這也是這篇文章推薦使用的一個重要原因。也有人把
        Cscope和Emasc綁定閱讀源碼。當(dāng)然工具的選取,也取決于個人習(xí)慣。

    Vim+Ctags+Cscope

    cscope的工作需要vim、ctags的配合,它們都是基于命令行的。在Ubuntu下,用戶只需執(zhí)
    行“sudo apt-get install cscope cscope-indexer ctags vim-full”即可完成軟件安裝。
    下面只是給出了三種工具的常用方法,更多功能可查看man手冊,或者官方文檔。

    Vim

    vim被看作是專門為程序員打造的文本編輯器,其豐富的編輯命令都是常用的簡單字符,用
    戶很容易上手。vim可對180多種語言的語法高亮,對C語言自動縮進(jìn),真則表達(dá)式字符匹配
    查找,功能強(qiáng)大,并支持多個操作系統(tǒng)平臺。關(guān)于vim的使用,這里不做講解。vim中文文
    檔[5]。
    在Ubuntu下默認(rèn)安裝的vim,沒有語法加亮功能。所以需要安裝vim-full,并在vim 配置
    文件 ~/.vimrc中添加一行 &amp;quot;syntax on&amp;quot; 這樣在vim中打開的源碼就有了語法高亮顯示。
    vim自帶了很多顏色主題,可以直接選取下面一行添加到vim配置文件當(dāng)中,重新打開vim即
    可生效。

    colorscheme elflord &amp;quot;我使用這個
    colorscheme darkblue
    colorscheme evening
    colorscheme murphy
    colorscheme torte
    colorscheme desert

    Ctags

    在源代碼根目錄下執(zhí)行 ctags -r 命令用來為程序源代碼生成標(biāo)簽文件,其-r選項表示遞
    歸操作,同時為子目錄也生成標(biāo)簽文件。vim利用生成的標(biāo)簽文件,可以進(jìn)行相應(yīng)檢索、并
    在不同的文件C語言元素之間來回切換。

    在vim中ctags的簡單使用
    1) 跳轉(zhuǎn)到指定的函數(shù)進(jìn)入vim后,用 “:tag func_name“ 跳到函數(shù)func_name處。使用tag
    命令時,可以使用TAB鍵進(jìn)行匹配查找,繼續(xù)按TAB鍵向下切換。
    某個函數(shù)有多個定義時

    :tag
    跳到第一個定義處,優(yōu)先跳轉(zhuǎn)到當(dāng)前文件
    :tnext
    跳到第一個
    :tfirst
    跳到前count個
    :[count]tprevious
    跳到后count個
    :[count]tnext
    跳到最后一個
    :tlast
    你也可以在所有tagname中選擇:
    :tselect tagname

    如果想跳到包含block的標(biāo)識符:“tag /block” 然后用TAB鍵來選擇。這里'/'就是告訴vim
    'block'是一個語句塊標(biāo)簽。
    2)用“CTRL + ]“快捷鍵,跳轉(zhuǎn)到光標(biāo)所在函數(shù)標(biāo)識符的定義處。
    3)使用“CTRL + T”退回上層。如果想在以write_開頭的標(biāo)識符中選擇一下, :tselect /^
    write_ 這里,'^'表示開頭,同理,'$'表示末尾。多個同名的標(biāo)識符

    Cscope

    運行cscope命令,出現(xiàn)兩個面板,上方是一個查找結(jié)果的顯示面板,下方是一個查找條件
    指定面板。使用TAB鍵在兩個面板間切換,也可使用上下左右方向件和翻頁鍵在同一面板內(nèi)
    貼換位置。選中顯示面板的某個項,回車即可進(jìn)入該文件,這是調(diào)用vim打開文件,這時就
    可以結(jié)合ctags使用了。當(dāng)然也可以直接使用vim打開文件,結(jié)合ctags閱讀源碼。
    使用前,必須現(xiàn)使用“cscope-indexer -r”命令遞歸生成索引信息文件。特殊情況下,還需
    要用戶使用find命令,主動生成索引信息文件,并指定給cscope工具。 cscope提供了如下
    九種查詢方式:

    Find this C symbol:
    #查找指定的C符號
    Find this global definition:
    #查找指定的全局定義
    Find functions called by this function:
    #查找指定函數(shù)調(diào)用的函數(shù)
    Find functions calling this function:
    #查找調(diào)用指定函數(shù)的函數(shù)
    Find this text string:
    #查找字符串
    Change this text string:
    #修改指定字符串
    Find this egrep pattern:
    #查找匹配字符
    Find this file:
    #查找指定文件
    Find files #including this file:
    #指定引用頭文件進(jìn)行查找

    在對應(yīng)某一項中輸入查找條件,回車即可進(jìn)行查詢,并將結(jié)果顯示在顯示面板。

    應(yīng)用實例

    下面以使用cscope閱讀內(nèi)核源代碼為例:

    $ wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.6.tar.bz2
    #
    從Linux內(nèi)核官網(wǎng)下載內(nèi)核源代碼
    $ tar xvfj linux-2.6.27.6.tar.bz2
    #解壓文件
    $ cd linux-2.6.27.6
    #進(jìn)入源代碼根目錄
    $ ctags -R
    #遞歸生成標(biāo)簽文件
    $ cscope-indexer -r
    #遞歸生成索引信息文件
    $ cscope
    #使用cscope閱讀源碼

    標(biāo)簽文件、索引信息文件只需要第一次或者代碼發(fā)生變動時生成,以后使用直接運行
    cscope即可。



    [1] http://sourcenav.sourceforge.net/
    [2] http://www.sourceinsight.com/
    [3] http://lxr.linux.no/
    [4] http://cscope.sourceforge.net/
    [5] http://vcd.gro.clinux.org/
    posted on 2011-08-25 13:30 MEYE 閱讀(4838) 評論(1)  編輯  收藏

    FeedBack:
    # re: vim+ctags+cscope 打造Android源碼閱讀工具
    2015-04-07 19:31 |
    貌似高深的扯淡,這種方式純粹是浪費時間!!,  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日韩亚洲欧洲在线com91tv| APP在线免费观看视频| 亚洲a一级免费视频| 亚洲成av人片不卡无码久久| 精品在线免费观看| 亚洲中文字幕日本无线码| 亚洲成年看片在线观看| 亚洲精品免费在线观看| 亚洲最大无码中文字幕| 亚洲欧洲自拍拍偷午夜色无码| 7723日本高清完整版免费| 亚洲一级二级三级不卡| a毛片免费全部在线播放**| 精品日韩亚洲AV无码| 日本免费一二区在线电影| 大地影院MV在线观看视频免费| 亚洲一区二区三区高清不卡 | 2019中文字幕在线电影免费| 亚洲国产精品第一区二区| 好紧我太爽了视频免费国产| 亚洲最大无码中文字幕| 久久久久久亚洲精品中文字幕 | 免费乱理伦在线播放| 亚洲精品免费在线视频| selaoban在线视频免费精品| 亚洲综合区小说区激情区 | 成年美女黄网站色大免费视频| 亚洲不卡视频在线观看| 久久久久亚洲AV成人网人人网站 | 亚洲乱码中文字幕在线| 亚洲视频在线免费观看| 久久国产成人亚洲精品影院 | 国产偷v国产偷v亚洲高清| 久久青草免费91观看| 免费大片黄在线观看| 亚洲国产精品乱码一区二区 | 国产网站在线免费观看| 波多野结衣在线免费观看| 人妻免费一区二区三区最新| 免费人成又黄又爽的视频在线电影| 亚洲精品第一国产综合野|