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. 2017-2018年红头发新版Cisco认证网络工程师(CCNA-R&S)全新讲解分享

    网名"红头发",多年授课经验,业内资深思科认证讲师,其所写的CISCO认证原创技术文章风靡各大网站与培训机构.精通CISCO各类路由交换产品,熟悉JUNIPER M/T系列路由产品 ...

  2. 重大漏洞:Bitlocker成摆设,多款固态硬盘硬件加密均可被绕过

    荷兰拉德堡德大学的两名研究人员日前发表论文,描述了固态硬盘流行加密软件Bitlocker中的关键漏洞.固态硬盘需要口令来加密和解密其上存储的内容,但该口令可以被绕过. 荷兰拉德堡德大学的两名研究人员日 ...

  3. Androidbutton事件的五中写法总结

    button事件的五中写法: 1.匿名内部类 2.类实现View.OnClickListener接口 3.创建实例化接口对象 4.使用内部类 5.自己定义方法,配置Android:onclick属性 ...

  4. OpenCASCADE Job - 武汉中南

    中南设计集团(武汉)工程技术研究院有限公司是中南工程咨询设计集团有限公司(以下简称“中南设计集团”)打造的工程技术研发和科研创新平台,为中南设计集团旗下全资子公司,于2018年2月成立.公司业务范围涵 ...

  5. Android简单实现Socket通信,client连接server后,server向client发送文字数据

    案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...

  6. view-activity跟控件在onkey事件上的传递关系

    android 中Activity跟View对于键盘的监听,主要有以下几个方法 //按键按下 public boolean onKeyDown(int keyCode, KeyEvent event) ...

  7. Scott Hanselman的问题-3

    .Net程序员面试 中级篇 (回答Scott Hanselman的问题)   继<.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)>跟<.Net程序员 ...

  8. 40.Node.js Web 模块

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计 ...

  9. vue 打包成 apk 文件(修改路径)

    第一个坑:文件引用路径 现在项目我们什么都没动,是初始化之后直接打包的状态,打开dist/index.htmnl文件整个网页都是一片空白的. 爬坑: 打开 config文件夹/index.js文件 a ...

  10. 虚拟局域网(VLAN)技术在企业网管理中的应用

    虚拟局域网(VLAN)技术在企业网管理中的应用 1.VLAN介绍     所谓VLAN 是指处于不同物理位置的节点根据需要组成不同的逻辑子网,即一个VLAN 就是一个逻辑广播域,它可以覆盖多个网络设备 ...