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即可。

  • 相关阅读:
    Java异常的分类
    Java SE 6 新特性: Java DB 和 JDBC 4.0
    Java SE 6 新特性: 对脚本语言的支持
    面向对象开发方法优点
    RocketMQ之八:水平扩展及负载均衡详解
    Bluetooth 4.0之Android 解说
    iOS截取视频缩略图的两种方法
    Java NIO Buffer
    spark 启动job的流程分析
    C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针
  • 原文地址:https://www.cnblogs.com/winfu/p/5548546.html
Copyright © 2011-2022 走看看