您的位置:首页 > 运维架构 > Linux

Linux下C代码浏览工具--cscope

2014-12-30 11:33 176 查看
Cscope 是一款开源免费的 C/C++浏览工具,自带一个基于文本的用户界面,通过cscope可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。Cscope对 C /C++支持较好,也可以自己定制来支持Java和Perl、Python等脚本语言。Vim和gvim都提供了cscope接口,通过适当的配置,可以在Unix/Linux下实现变量、函数、文件等之间跳转,就像Windows下的Source
Insight一样灵活易用。

        在fedora20-x86环境下安装cscope.i686 0:15.8-8.fc20,即15.7版。网上已有较多使用方法说明,比如这里的网址:http://docs.oracle.com/cd/E19205-01/820-1210/6nct7sde6/index.html

     这里主要说明上述环境下命令行的使用,进入源码目录,执行cscope,会列出如下选项:

Find this C symbol:         

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:

Find assignments to this symbol:

     左上角会出现help提示,意思是按shift+?会出现一些帮助信息。

1.cscope帮助

     进入上述主信息窗口后,按shift + ?会进入帮助界面,主要说明了cscope的菜单操作命令:

Tab    在输入和输出区域交换位置

回车键 在主信息界面(输入界面)中移至下一个输入字段,在输出界面中表示确定并进入。

Ctrl+D退出cscope

...

2.Find this C symbol

     首先看第一个选项,表示查找C语言符号,即查找函数名、宏、枚举值等出现的地方,如输入test1(这是个函数名),会在终端中输出如下信息:

  File    Function Line

0  test1.h <global>  7 extern int test1(int a, int b);

1  main.c  thread1  67 test1(1,2);

2  test1.c test1     3 int test1(int a, int b)

然后上下移动光标选择上述序号后回车,即可进入test1符号对应的地方,离开方法跟用vim离开方法一样,离开后有退到上述信息处,以便查看其他包含test1符号的源码文件。当要退出上述信息界面到达主界面时,按Tab键就会切回到主信息界面。

3.Find this global definition

 
      表示查找函数、宏、枚举等定义的位置,类似ctags的功能,操作过程类似于Find this C symbol。

4.Find
functions called by this function


     表示列出本函数调用的函数,在Find functions called by this function:后输入源码中某个函数后,就会在终端中输出此函数调用了哪些函数。操作过程类似于Find
this C symbol。

5.Find functions calling this
function


     表示列出调用本函数的所有函数, 注意,cscope只在当前源码目录中查找。操作过程类似于Find
this C symbol。

6.其它

Find this text string:          ---查找文本字符串

Change this text string: ---改变文本字符串

Find this egrep pattern:---查找egrep模式,相当于egrep功能,但查找速度快多了

Find this file: ---查找并打开文件,类似vim的find功能

Find files #including this file: ---查找包含本文件的文件

Find assignments to this symbol: ---查找指定字符串

7.对于多层源码目录

     对于多层源码目录的源代码,最好使用如下方法:

     首先执行find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files,使用find命令,查找当前目录及子目录中所有后缀名为".h",
".c"和".c"的文件,并把查找结果重定向到文件cscope.files中。

    然后执行cscope -Rbkq -i cscope.files,cscope根据cscope.files中的所有文件,生成符号索引文件,会生成三个文件:cscope.out,
cscope.in.out, cscope.po.out。

上面所用到的命令参数,含义如下:
-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,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: