Cscope how to support java and c++

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> 能够回到跳转前的位置。

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

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

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

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

以上我们简介了cscope的用法。当中我们仅仅用到了一个 s 命令,即跟在 <C-\> 和 <[email protected]> 后面的 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.*

时间: 2024-11-11 16:55:19

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

VIM+ctags+cscope用法

使用vim + cscope/ctags,就能够实现Source Insight的功能,可以很方便地查看分析源代码. 关键词: vim, cscope, ctags, tags 1. 查看vim是否支持cscope $ vim --version | grep cscope 2. 编译支持cscope的VIM(--enable-cscope) # USE="bash-completion cscope nls perl python -acl -gpm -minimal -ruby -vim-p

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

Java SE 6 provides an in-depth focus on performance, offering expanded tools for managing and monitoring applications and for diagnosing common problems. The improvements include: Monitoring and management API enhancements Official support for an imp

Tomcat 支持的Java 版本和兼容性总结

最新最全的Tomcat 支持的Java版本对照,即兼容性一览表: Servlet Spec JSP Spec EL Spec WebSocket Spec Apache Tomcat version Actual release revision Support Java Versions 4.0 TBD (2.4?) TBD (3.1?) TBD (1.2?) 9.0.x None 8 and later 3.1 2.3 3.0 1.1 8.0.x 8.0.15 7 and later 3.0

【转】如何在Mac上卸载Java

如何在 Mac 上卸载 Java? 本文适用于: 平台: Macintosh OS X Java 版本: 7.0, 8.0 使用终端卸载 Oracle Java 注:要卸载 Java,必须具有管理员权限,并且必须以 root 用户身份或者使用 sudo 工具来执行删除命令. 按照下面所示,删除一个目录和一个文件(符号链接): 单击位于停靠栏中的 Finder 图标 单击实用程序文件夹 双击终端图标 在"终端"窗口中,复制和粘贴命令:sudo rm -fr /Library/Intern

mac java jdk 安装删除

安装: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载安装双击安装 卸载: https://www.java.com/zh_CN/download/help/mac_uninstall_java.xml 1 在"终端"窗口中,复制和粘贴命令: 2 sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.p

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 pleasure. Enjoy! Table Of Contents 1. Introduction 2. New Features in Java language 2.1. Lambdas and Functional Interfaces 2.2. Interface Default and St

eclim Java/C使用配置

背景 在windows上,虽然ctags+cscope 甚至可以对java启用, 但是重名的太多,我需要更精确些.于是找到eclim.YCM 目前还不支持java, 且在linux我好像偶尔会卡的感觉, 而eclim 同时支持java和C(需CDT), 虽然基于java (是的: 配置 C IDE 基于java 写的eclipse 需要gui, 在linux ssh 连接终端是不能跑eclipse的),但是我觉得速度还可以,没卡过.让我们感觉到后浪推前浪的感觉.但是习惯了vim 方式编辑,ecl

cscope 的使用(转载)

转自:http://laokaddk.blog.51cto.com/368606/1242365/ 1, cscope安装 软件下载:http://sourceforge.net/project/showfiles.php?group_id=4664 软件安装: ./configure --with-flex  (注:如果平台是Linux,最好带上 --with-flex选项) make  (注:我没有遇到错误) make install (注: 直接安装好了) 2,cscope配置 修改vim

Java Machine Learning Tools &amp; Libraries--转载

原文地址:http://www.demnag.com/b/java-machine-learning-tools-libraries-cm570/?ref=dzone This is a list of 25 Java Machine learning tools & libraries. Weka has a collection of machine learning algorithms for data mining tasks. The algorithms can either be