Cscope

首先在文件夹下建立cscope索引文件

find -name '*.c' > cscope.file

cscope -Rbkq

这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。

当中cscope.out是主要的符号索引,后两个文件是使用"-q"选项生成的。能够加快cscope的索引速度。

上面所用到的命令參数,含义例如以下:

-R: 在生成索引文件时,搜索子文件夹树中的代码

-b: 仅仅生成索引文件,不进入cscope的界面

-k: 在生成索引文件时,不搜索/usr/include文件夹

-q: 生成cscope.in.out和cscope.po.out文件。加快cscope的索引速度接下来。就能够在vim里读代码了。

不 过在使用过程中,发现无法找到C++的类、函数定义、调用关系。细致阅读了cscope的手冊后发现,原来cscope在产生索引文件时,仅仅搜索类型为 C, lex和yacc的文件(后缀名为.c, .h, .l, .y)。C++的文件根本没有生成索引。

只是依照手冊上的说明。cscope支持c++和Java语言的文件。

于是依照cscope手冊上提供的方法。先产生一个文件列表。然后让cscope为这个列表中的每一个文件都生成索引。

为了方便使用,编写了以下的脚本来更新cscope和ctags的索引文件:

#!/bin/sh

find . -name "*.h" -o -name "*.c" -o -name "*.cc"  -o -name "*.java"> cscope.files

cscope -bkq -i cscope.files

ctags -R

这个脚本,首先使用find命令,查找当前文件夹及子文件夹中全部后缀名为".h", ".c"和".cc"的文件。并把查找结果重定向到文件cscope.files中。

然后cscope依据cscope.files中的全部文件,生成符号索引文件。

最后一条命令使用ctags命令,生成一个tags文件,在vim中运行":help tags"命令查询它的使用方法。

它能够和cscope一起使用。

-R: 在生成索引文件时,搜索子文件夹树中的代码

-b: 仅仅生成索引文件,不进入cscope的界面

-q: 生成cscope.in.out和cscope.po.out文件。加快cscope的索引速度

-k: 在生成索引文件时,不搜索/usr/include文件夹

-i: 假设保存文件列表的文件名称不是cscope.files时,须要加此选项告诉cscope到哪儿去找源文件列表。能够使用“-”。表示由标准输入获得文件列表。

-I dir: 在-I选项指出的文件夹中查找头文件

-u: 扫描全部文件,又一次生成交叉索引文件

-C: 在搜索时忽略大写和小写

-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的文件夹也能够使用它了。

3在vim里读代码

在VIM中使用cscope很easy,首先调用“cscope add”命令加入一个cscope数据库,然后就能够调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,例如以下:比如。我们想在代码中查找调用work()函数的函数,我们能够输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,如今vim列出了这个符号出现的全部位置。

我们还能够进行字符串查找,它会双引號或单引號括起来的内容中查找。还能够输入一个正則表達式。这类似于egrep程序的功能。

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方

g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能

d: 查找本函数调用的函数

c: 查找调用本函数的函数

t: 查找指定的字符串

e: 查找egrep模式,相当于egrep功能,但查找速度快多了

f: 查找并打开文件,类似vim的find功能

i: 查找包括本文件的文

cs help

find 的选项

0或则S:查找本符号

1或则G:查找本定义

2或则D:查找本函数调用的函数

3或则C:查找调用本函数的函数

4或则T:查找本字符串

6或则E:查找本EGREP模式

7或则F:查找本文件

8或则I:查找包括本文件的文件

热后就能够在vim中使用cscope了。详细用法參考

//----------------------------------------------------------------------

--------------------------------------------------------------------------------

cscope是什么?

cscope 是一个 C 语言的浏览工具,通过这个工具能够非常方便地找到某个函数或变量的定义位置、被调用的位置等信息。眼下支持 C 和 C++。cscope 自身带一个基于文本的用户界面,只是 gvim 提供了cscope接口,因此能够在 gvim 中调用 cscope,方便快捷地浏览源码。

为什么要使用cscope?

如果我们在读一份非常大的项目的源码。

我们或许会须要进行例如以下操作。

•函数 foo() 调用了函数 bar(),想看看函数 bar() 的内容。•想知道 foo() 在什么地方被调用。

•想知道一个结构类型的定义。尽管在 Linux 下使用 grep 或者在 Windows 下使用文件查找功能也能找到想找的文件,可是效率太低了。

有没有什么更为方便快捷的方法?

这就须要用到cscope。gvim结合cscope。能够非常方便地完毕以上的操作。仅仅需简单地敲几下键盘就可以跳转到想去的地方。

怎样使用cscope?

下载

假设你使用的是Linux。那么恭喜你,非常可能操作系统已经为你提供了cscope工具。

使用以下的命令确认它是否存在:

cscope -V假设cscope工具已经安装,上面的命令将显示cscope的版本,类似于以下的结果:

cscope: version 16.0a可是假设提示错误说找不到cscope命令,说明cscope尚未安装。

你能够到网上去寻找cscope的RPM包。另外。我们能够从cscope官方站点上下载到 cscope 的最新源码。在Linux下你能够编译该源码生成cscope的可运行文件。

假设你是Windows用户,就没有这么好的福气了,由于在Windows下编译程序并非非常easy的事情。好在已经有人为我们编译好了Windows版。能够从这里下载到:http://iamphet.nm.ru/cscope/

安装

安装非常easy,仅仅要将cscope的可运行文件放到PATH环境变量包括的文件夹中就可以。推荐Windows用户将上面下载到的 cscope.exe 与 gvim 放在同一个文件夹下,如 C:\Program Files\Vim\gvim64 下,然后单击開始菜单选择运行。输入 cmd,启动命令行提示符程序,运行

cscope -V假设能看到cscope的版本号好则说明成功安装。

另外,为了方便地使用cscope,我们还须要下载cscope的键盘映射设置。这样就能够在gvim中简单地通过快捷键来使用 cscope,而不必敲复杂的命令了。

键盘映射能够从这里下载:http://cscope.sourceforge.net/cscope_maps.vim

将下载到的 cscope_maps.vim 放在gvim的插件文件夹里,如 C:\Program Files\Vim\vimfiles\plugin 中。

Linux用户能够放在 $HOME/.vim/plugin 中。

建立符号数据库

我们如果我们要阅读的代码放在 D:\src\myproject 下。然后打开命令行。进入源码所在的文件夹,为 cscope 建立搜索文件列表。在命令行中运行下面命令:

dir /s /b *.c *.h  > cscope.files假设你的源码是C++。则能够将 cpp 等扩展名也增加到上面的命令中。

dir /s /b *.c *.h *cpp *.hpp  > cscope.files假设是Linux用户,则能够使用 find 命令实现相同的功能:

find $(pwd) -name "*.[ch]"然后运行下面命令:

cscope -b运行结束后你能够在当前文件夹下发现 cscope.out 文件,这就是 cscope 建立的符号数据库。

上面这个命令中,-b參数使得cscope不启动自带的用户界面。而只建立符号数据库。

浏览源码

使用 gvim 打开你的源码文件夹中随意一个C程序文件。然后在gvim中运行例如以下命令:

:cscope add D:\src\myproject\cscope.out因为在 gvim 中能够使用命令缩写,因此上面的命令能够写成:

:cs a D:\src\myproject\cscope.out这样就打开了刚刚建立的符号数据库。

通过以下的命令能够检查数据库连接的存在。

:cscope show该命令能够缩写为

:cs s如今将光标移动到源码中的某个函数名上。依次按下一下组合键:

<C-\>s稍等片刻之后你会在屏幕下放看到例如以下的字样*1:

Cscope tag: display   #   line  filename / context / line   1    342  D:\src\myproject\src\global.h <<GLOBAL>>             void display(void );   2    616  D:\src\myproject\src\command.c <<changestring>>             display();   3    138  D:\src\myproject\src\display.c
<<display>>             display(void )   4    385  D:\src\myproject\src\main.c <<main.c>>             display();   5    652  D:\src\myproject\src\main.c <<main.c>>             display();   6    663  D:\src\myproject\src\main.c <<main.c>>             display();Enter
nr or choice (<CR> to abort):这里显示出的就是整个project中使用到了 display 这个标识符的位置。此时输入 4。回车。就可以跳转到 main.c 的 385 行调用 display() 函数的地方进行浏览。浏览结束后按 <C-T> 或者 <C-O> 能够回到跳转前的位置。

然后将光标移动到源码某个函数名上,迅速地依次安以下的组合键:

<C-@>s当中 <C-@> 按 Ctrl-2 就可以输入。相同。屏幕上出现了一排结果,选择之后你会发现,跳转到的文件将在水平方向的新窗体中打开。

然后将光标移动到源码某个函数名上。迅速地依次安以下的组合键:

<C-@><C-@>s选择之后你会发现。跳转到的文件将在垂直方向的新窗体中打开。

以上我们简介了cscope的用法。当中我们仅仅用到了一个 s 命令,即跟在 <C-\> 和 <C-@> 后面的 s 键。相同,我们能够使用下面的功能键实现不同的跳转功能。

•c: 查找该函数被调用的位置•d: 查找该函数调用了哪些函数•e: 查找指定的正规表达式•f: 查找指定的文件•g: 查找指定标识符的定义位置•i: 查找该文件在哪些地方被包括•s: 查找指定标识符的使用位置•t: 查找指定的文本字符串命令行使用说明


除了上述通过快捷键映射的方式使用cscope之外。也能够直接在gvim命令行中使用cscope。这样就能够任意定义查找字符串。而不必局限于源码中已有的标识符。命令格式例如以下:

:cscope find <c|d|e|f|g|i|s|t> <keyword>该命令能够缩写为

:cs f <c|d|e|f|g|i|s|t> <keyword>一个比較有用的技巧是使用cscope打开文件。使用下面命令就可以直接打开名为display.c的文件,而不必先切换到display.c所在的文件夹。

:cs f f display.ccscope也支持正规表达式。假设记不清某个函数的名称,能够用以下的方式来找到该函数的定义位置。

:cs f g .*SetConfiguration.*

Cscope how to support java and c++的更多相关文章

  1. How to deploy JAVA Application on Azure Service Fabric

    At this moment, Azure Service Fabric does not support JAVA application natively (but it's on the sup ...

  2. cscope 的使用

    一. cscope安装 1.软件下载:http://sourceforge.net/project/showfiles.php?group_id=4664 2.软件安装: ./configure -- ...

  3. Monitor and diagnose performance in Java SE 6--转载

    Java SE 6 provides an in-depth focus on performance, offering expanded tools for managing and monito ...

  4. Java 8 Features – The ULTIMATE Guide--reference

    Now, it is time to gather all the major Java 8 features under one reference post for your reading pl ...

  5. Thread Dump 和Java应用诊断(转)

    Thread Dump 和Java应用诊断 Thread Dump是非常有用的诊断Java应用问题的工具,每一个Java虚拟机都有及时生成显示所有线程在某一点状态的thread-dump的能力.虽然各 ...

  6. cscope的使用

    转自:http://easwy.com/blog/archives/advanced-vim-skills-cscope/ 本节所用命令的帮助入口: :help cscope 在前面的文章中介绍了利用 ...

  7. java applet初探之计算器

    这里是用java写的一个计算器,用appllet的方式在浏览器中运行,如果电脑上装有java运行环境jre就能一试.将html代码保存为*.html(名称能够自定),applettest编译为clas ...

  8. Java客户端工具选择:HTML?Swing?XML?

    整理下面的文章是因为个人觉得写的很好,关于java的客户端了解也并不是太多.看了下面的文章觉得很有必要贴出来,方便自己以后了解java客户端编程. Java软件设计师和管理人员经常会面临这样的难题:在 ...

  9. Java:配置环境(Mac)——Eclipse;修改JDK版本后,Eclipse打不开

    1.官网下载 选择一个速度快的镜像 推荐东软这个 2.双击下载的安装包,下一步 其中有一步是选择Eclipse版本,SE选第一个,EE第二个.仔细审题吧. 3.配置JDK 应用.关闭 4.测试:写个H ...

随机推荐

  1. web开发快速提高工作效率的一些资源

    前端学习资源实在是又多又广,在这样的一个知识的海洋里,我们像一块海绵一样吸收,想要快速提高效率,平时的总结不可缺少,以下总结了一些,排版自我感觉良好,推送出来,后续持续跟新中...... 开发工具 H ...

  2. 【editplus经常用的快捷键】Editplus 选中一行ctrl+r,Edit 合并行 Ctrl+Shift+J 合并选定行 删除当前行

    Editplus 选中一行: ctrl+rEditplus 复制一行: ctrl+r选择行,然后ctrl+c复制.复制一行到下一行中:Editplus有:Ctrl+j 复制上一行的一个字符到当前行Ed ...

  3. Android Netroid解析之——断点续传下载及问题修正

    提到Netroid也许非常多人不知道这个框架,但我假设说Volley想必没有人不知道吧. Netroid是一个基于Volley实现的Android Http库.提供运行网络请求.缓存返回结果.批量图片 ...

  4. 通过jQuery的Ajax方式来提交Form表单

    通过jQuery的Ajax方式来提交Form表单 $.ajax({ url:ajaxCallUrl, type:"POST", cache:true, async:false, d ...

  5. BZOJ 2037 区间DP

    跟POJ 3042是一个类型的http://blog.csdn.net/qq_31785871/article/details/52954924 思路: 先排个序 (把初始位置也插进去) f[i][j ...

  6. 运动识别之HOJ3D和HMM

    http://cvrc.ece.utexas.edu/Publications/Xia_HAU3D12.pdf   View Invariant Human Action Recognition Us ...

  7. 2017国家集训队作业[agc016e]Poor Turkey

    2017国家集训队作业[agc016e]Poor Turkey 题意: 一开始有\(N\)只鸡是活着的,有\(M\)个时刻,每个时刻有两个数\(X_i,Y_i\),表示在第\(i\)个时刻在\(X_i ...

  8. tee---读取标准输入,将内容输出成文件

  9. ActiveMQ学习总结(7)——ActiveMQ使用场景

    MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传 ...

  10. Ubuntu 美团sql优化工具SQLAdvisor的安装(转)

    by2009 by2009 发表于 3 个月前 SQLAdvisor简介 SQLAdvisor是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具.它基于MySQ ...