zoukankan      html  css  js  c++  java
  • ctargs使用

      ctargs为源码的变量/对象、结构体/类、函数/接口、宏等产生索引文件,以便快速定位。目前支持41种语言,这里仅以C/C++为例:ctags可以产生c/c++语言所有类型的索引文件,具体如下:

    [plain]
    1. -> class names(类名)   
    2. -> macro definitions(宏定义)   
    3. -> enumeration names(枚举名)   
    4. -> enumerators(枚举变量)   
    5. -> function definitions(函数定义)  
    6. -> function prototypes/declarations(函数定义/声明)   
    7. -> class, interface, struct, and union data members(类,接口,结构体,联合体)  
    8. -> structure names(结构体名)  
    9. -> typedefs(别名)  
    10. -> union names(联合体名)  
    11. -> variables (definitions and external declarations)变量  


    【ctags的安装】
    1)在线安装:

    sudo apt-get install ctags (ubuntu)

    (RedHat系列使用:yum install ctags)
    若不成功,可能是因为源的问题,换一下软件源update后重新执行上述命令即可。
    2)手动下载安装:
    下载地址
    Official site: http://ctags.sourceforge.net/
    VIM online: http://www.vim.org/scripts/script.php?script_id=610
    参考步骤(以5.8版本ctags-5.8.tar.gz为例)
    解压后
    $ cd ctags-5.8
    $ ./configure
    $ make
    # make install
    安装结束后,使用ctags命令测试是否成功
    或whatis ctags, whereis ctags等

    【生成tags文件】
     安装成功后,要为源码文件生成tags文件,才可享受ctags为阅读代码带来的便利。

    $ ctags -R
    递归的为当前目录及子目录下的所有代码文件生成tags文件

    为某些源码生成tags文件,使用如下命令
    $ ctags filename.c filename1.c file.h

    $ ctags *.c *.h

    为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
    ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
    其中:
    选项c++-kinds 用于指定C++语言的 tags记录类型,  --c-kinds用于指定c语言的,  通用格式是  --{language}-kinds
    选项 fileds 用于指定每条标记的扩展字段域
    extra 选项用于增加额外的条目:   f表示为每个文件增加一个条目,  q为每个类增加一个条目


    【使用方法】
    在vim打开源码时,指定tags文件,才可正常使用,通常手动指定,在vim命令行输入:
    :set tags=./tags(当前路径下的tags文件)
    若要引用多个不同目录的tags文件,可以用逗号隔开

    或者,设置 ~/.vimrc,加入一行,则不用手动设置tags路径:
    set tags=~/path/tags

    若要加入系统函数或全局变量的tag标签,则需执行:
    ctags -I __THROW –file-scope=yes –langmap=c:+.h –languages=c,c++ –links=yes –c-kinds=+p --fields=+S -R -f ~/.vim/systags /usr/include /usr/local/include
    并且在~/.vimrc中添加(亦可用上面描述的手动加入的方式):
    set tags+=~/.vim/systags
    这样,便可以享受系统库函数名补全、原型预览等功能了。

    如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
    set tags=tags;
    set autochdir

    设置好了tags文件,在定位变量/函数的定义时,最常用的快捷键是:
    Ctrl + ]
    跳转到变量或函数的定义处,或者用命令
    :ta name
    而使用快捷组合键
    Ctrl + o/t
    返回到跳转前的位置。

    另外,ctags不会生成局部变量的索引,不过可以使用gd组合键(对光标所在处的word进行快捷查找定位)来定位,也是相当快捷的。

    $ vim -t myAdd
    用vim打开文件时,添加参数-t funcName会自动打开定义该函数的文件并定位到定义首行,上面这句就是找到myAdd定义的文件打开并将光标置于定义的第一行处。

    :tags
    会列出查找/跳转过程(经过的标签列表)


    另外,附上vim环境中其他较为好用的快捷键:
    * 定位至当前光光标所指单词的下一次出现的地方
    # 定位至当前光光标所指单词的上一次出现的地方
    n 定位至跳至已被标记出的单词下一次出现的地方
    shift+n 定位至跳至已被标记出的单词上一次出现的地方


    关于更详细的ctags用法,vim中使用
    :help tags

    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数据库,必须在android源码顶层运行vim程序

    我的.vimrc如下:

    "开关tag窗口
    
    nnoremap <silent> <F8> :TlistToggle<CR>
    
     
    
    "使用右侧tag窗口
    
    "let Tlist_Use_Right_Window=1
    
     
    
    "一般设置.
    
    "set nocompatible "VIM而不是VI
    
    set history=50 "历史记录50条
    
    set fenc=utf-8 "设置默认语言为8位unicode
    
    "man Q gq "屏蔽Q, 以免进入Ex模式
    
    filetype on "打开文件类型检测
    
     
    
    "
    
    ""颜色设置.
    
    colorscheme delek "主题
    
    "colorscheme evening "主题
    
    syntax on "语法高亮
    
    "set hls " 查找文本高亮
    
     
    
    "界面设置.
    
    set ruler "显示当前位置
    
    set number "显示行号
    
    ""set nonumber "不显示行号
    
     
    
    "格式设置.
    
    set autoindent "自动缩进
    
    set smartindent "智能缩进
    
    set cindent "C缩进
    
    set tabstop=4 "硬TAB
    
    set softtabstop=4 "软TAB
    
    set shiftwidth=4 "缩进空格数
    
    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可执行文件,放到PATH环境变量中,就可以在子目录中通过mvim来打开android源码,并进行各种跳转了。

    使用cscope的最大好处是可以替代source insight的功能,并可以快速定位某个函数在哪些地方被调用,非常方便



    使用Vim+Ctags+Cscope阅读源代码

    http://www.man.lupaworld.com/thread-49968-1-1.html

    代码阅读工具简介

    对于学习Linux内核的人来说,源代码的阅读尤为重要。因为所有设计思想、内部机制都是
    以代码的形式实现,所有的资料也都是为了更好的诠释代码。那么一个好的阅读工具,能
    够提高阅读的效率和效果。常见的代码阅读工具有,Source Navigator、Source Insight
    、lxr、Cscope、Kscope等。

      • &amp;quot;Source Navigator&amp;quot;是红帽子公司的,以GNU GPL发布,可从官方网站[1]下载使用。
      • &amp;quot;Source Insight&amp;quot;目前只有Windows平台的,官方网站[2]。需要注册才能使用,或者
        从网上下载注册机生成注册码。在Linux下通过wine模拟虽然可以方便使用,但它毕竟
        是Windows平台的东西,并不能很自由的使用。
      • lxr(linux cross reference)[3]为程序源代码建立索引数据库,利用perl脚本CGI动态
        生成包含源码的web页面,你可以用任何一种浏览器查阅。缺点是需要服务器支持,还
        有速度。
      • &amp;quot;Cscope&amp;quot;[4]为终端下的代码阅读工具,资源消耗少,对那些忠于命令行的行操作的人
        ,使用起来更加方便、灵活。这也是这篇文章推荐使用的一个重要原因。也有人把
        Cscope和Emasc绑定阅读源码。当然工具的选取,也取决于个人习惯。

    Vim+Ctags+Cscope

    cscope的工作需要vim、ctags的配合,它们都是基于命令行的。在Ubuntu下,用户只需执
    行“sudo apt-get install cscope cscope-indexer ctags vim-full”即可完成软件安装。
    下面只是给出了三种工具的常用方法,更多功能可查看man手册,或者官方文档。

    Vim

    vim被看作是专门为程序员打造的文本编辑器,其丰富的编辑命令都是常用的简单字符,用
    户很容易上手。vim可对180多种语言的语法高亮,对C语言自动缩进,真则表达式字符匹配
    查找,功能强大,并支持多个操作系统平台。关于vim的使用,这里不做讲解。vim中文文
    档[5]。
    在Ubuntu下默认安装的vim,没有语法加亮功能。所以需要安装vim-full,并在vim 配置
    文件 ~/.vimrc中添加一行 &amp;quot;syntax on&amp;quot; 这样在vim中打开的源码就有了语法高亮显示。
    vim自带了很多颜色主题,可以直接选取下面一行添加到vim配置文件当中,重新打开vim即
    可生效。

    colorscheme elflord &amp;quot;我使用这个
    colorscheme darkblue
    colorscheme evening
    colorscheme murphy
    colorscheme torte
    colorscheme desert

    Ctags

    在源代码根目录下执行 ctags -r 命令用来为程序源代码生成标签文件,其-r选项表示递
    归操作,同时为子目录也生成标签文件。vim利用生成的标签文件,可以进行相应检索、并
    在不同的文件C语言元素之间来回切换。

    在vim中ctags的简单使用
    1) 跳转到指定的函数进入vim后,用 “:tag func_name“ 跳到函数func_name处。使用tag
    命令时,可以使用TAB键进行匹配查找,继续按TAB键向下切换。
    某个函数有多个定义时

    :tag
    跳到第一个定义处,优先跳转到当前文件
    :tnext
    跳到第一个
    :tfirst
    跳到前count个
    :[count]tprevious
    跳到后count个
    :[count]tnext
    跳到最后一个
    :tlast
    你也可以在所有tagname中选择:
    :tselect tagname

    如果想跳到包含block的标识符:“tag /block” 然后用TAB键来选择。这里'/'就是告诉vim
    'block'是一个语句块标签。
    2)用“CTRL + ]“快捷键,跳转到光标所在函数标识符的定义处。
    3)使用“CTRL + T”退回上层。如果想在以write_开头的标识符中选择一下, :tselect /^
    write_ 这里,'^'表示开头,同理,'$'表示末尾。多个同名的标识符

    Cscope

    运行cscope命令,出现两个面板,上方是一个查找结果的显示面板,下方是一个查找条件
    指定面板。使用TAB键在两个面板间切换,也可使用上下左右方向件和翻页键在同一面板内
    贴换位置。选中显示面板的某个项,回车即可进入该文件,这是调用vim打开文件,这时就
    可以结合ctags使用了。当然也可以直接使用vim打开文件,结合ctags阅读源码。
    使用前,必须现使用“cscope-indexer -r”命令递归生成索引信息文件。特殊情况下,还需
    要用户使用find命令,主动生成索引信息文件,并指定给cscope工具。 cscope提供了如下
    九种查询方式:

    Find this C symbol:
    #查找指定的C符号
    Find this global definition:
    #查找指定的全局定义
    Find functions called by this function:
    #查找指定函数调用的函数
    Find functions calling this function:
    #查找调用指定函数的函数
    Find this text string:
    #查找字符串
    Change this text string:
    #修改指定字符串
    Find this egrep pattern:
    #查找匹配字符
    Find this file:
    #查找指定文件
    Find files #including this file:
    #指定引用头文件进行查找

    在对应某一项中输入查找条件,回车即可进行查询,并将结果显示在显示面板。

    应用实例

    下面以使用cscope阅读内核源代码为例:

    $ wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.6.tar.bz2
    #
    从Linux内核官网下载内核源代码
    $ tar xvfj linux-2.6.27.6.tar.bz2
    #解压文件
    $ cd linux-2.6.27.6
    #进入源代码根目录
    $ ctags -R
    #递归生成标签文件
    $ cscope-indexer -r
    #递归生成索引信息文件
    $ cscope
    #使用cscope阅读源码

    标签文件、索引信息文件只需要第一次或者代码发生变动时生成,以后使用直接运行
    cscope即可。

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/winfu/p/5548546.html
Copyright © 2011-2022 走看看