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. 推荐学习《Python与量化投资从基础到实战》PDF及代码+《量化投资以Python为工具》PDF及代码

    利用python分析量化投资问题是现在研究的热点,推荐两份资料用于学习 <Python与量化投资:从基础到实战>主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘. ...

  2. 【python 设计模式】单例模式

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某 ...

  3. QQ,新浪,SNS等公众平台的登录及api操作

    QQ的写法地址:http://www.oschina.net/code/snippet_930167_19888 Sina的写法地址:http://www.oschina.net/code/snipp ...

  4. vue踩坑-This relative module was not found

    在使用vue.js的日期选择插件 的时候,报错如下 This relative module was not found: * ../calendar.vue in ./node_modules/ba ...

  5. CCF模拟 无线网络

    无线网络 时间限制: 1.0s 内存限制: 256.0MB   问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上.任何两个无线路由器只要距离不超过 r 就能互相 ...

  6. 安卓MP3播放器开发实例(3)之进度条和歌词更新的实现

    上一次谈了音乐播放的实现,这次说下最复杂的进度条和歌词更新.因为须要在播放的Activity和播放的Service间进行交互,所以就涉及了Activity对Service的绑定以及绑定后数据的传输,这 ...

  7. matlab 时频分析(短时傅里叶变换、STFT)

    短时傅里叶变换,short-time fourier transformation,有时也叫加窗傅里叶变换,时间窗口使得信号只在某一小区间内有效,这就避免了传统的傅里叶变换在时频局部表达能力上的不足, ...

  8. 1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    解决方法如下:项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”. 终极解决方案:VS2010在经历一些更新后,建立Win32 Console Project时会出“err ...

  9. [Express] Upload Files with Express

    In this lesson we create a new Express web server app for handling file uploads and persisting them ...

  10. 车牌识别--S5PV210測试第二次优化

    优化: 1.RGB转HSV 浮点运算改成定点运算: 2.匹配模板由图片改成C语言数组: 3.优化測试BMP车牌图片读取(两层for循环改为一层for循环). 总体相比优化之前时间降低110ms左右. ...