彩运网网址-彩运网网上登录

Cscope的使用(领略Vim + Cscope的强大魅力)彩运网

1、Cscope介绍

Vim的简单配置

 

cscope在sourceforge的主页中有vim中使用cscope的方法,同时给出了一个vim的配置文件,或者执行sudo apt-get install cscope

       Cscope是类似于ctags一样的工具,但可以认为她是ctags的增强版,因为她比ctags能够做更多的事。在Vim中,通过cscope的查询,跳转到指定的地方就像跳转到任何标签;她能够保存标签栈,所以通过合适的键盘映射绑定,你能够在函数向后或向前跳转,就像通常使用的tags一样。

在cscope界面中查询:

       首次使用Cscope时,他会根据源文件生成符号数据库。然后在以后的使用中,cscope只是在源文件有改动或源文件列表不同时才会重建数据库。当在重建数据库时,未改动过的文件对应的数据库信息会从旧的数据库中拷贝过来,所以会使重建数据库快于一开始的新建数据库。

在解压的内核源代码根目录中进行:

       当你在命令行下调用cscope时,你会获得一个全屏选择窗口,能够使你查询特定的内容。然而,一旦你查询的有匹配,那么就会用你默认的编辑器来编辑该源文件,但是你不能够简单的使用Ctrl+]或者:tag命令来从一个标签跳转到另一个标签。

ctags –R 生成tags文件,在执行cscope –R ,生成cscope.out数据库文件并进入cscope界面。

       Vim中的cscope接口是通过以命令行形式调用完成的,然后解析查询返回的结果。最终的结果就是cscope查询结果就像通常的tags一样,这样你就可以自由跳转,就像在使用通常的tags(用ctrl+]或者:tag跳转)。

在menu处也就是提示按什么方式查询的地方按下 问号 (?)给出提示

 

 

2、Cscope相关命令

已经生成了tags和cscope.out文件后,不想再cscope界面中查询,而是直接在vim中调用cscope.out和ctags文件也可以,但是必须保证vim打开的文件同一个目录中有ctags和cscope.out文件。Ctags和cscope使用方法如下:

      

彩运网网址,VIM使用cscope查找

所有的cscope命令都是通过向主cscope命令”:cscope”传递参数选项。她最短的缩写是”:cs”。”:scscope”命令也做同样的事情并且同时会横向分隔窗口(简称:”scs”)。

1,加载cscope.out文件

      

在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能。

可用的缩写有:

在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.在vim命令行下执行:

add :增加一个新的cscope数据库/链接库

:cs add cscope.out

              使用方法:

在vim命令行下执行:

                     :cs add {file|dir} [pre-path] [flags]

:cs help

              其中:

cscope commands:

                     [pre-path] 就是以-p选项传递给cscope的文件路径,是以相对路径表示的文件

add  : Add a new database             (Usage: add file|dir [pre-path] [flags])

前加上的path,这样你不要切换到你数据库文件所在的目录也可以使用它了。

find : Query for a pattern            (Usage: find c|d|e|f|g|i|s|t name)

                     [flags] 你想传递给cscope的额外旗标

       c: Find functions calling this function

              实例:

       d: Find functions called by this function

                     :cscope add /root/code/vimtest/ftpd

       e: Find this egrep pattern

                     :cscope add /project/vim/cscope.out /usr/local/vim

       f: Find this file

                     :cscope add cscope.out /usr/local/vim –C

       g: Find this definition

 

       i: Find files #including this file

       find :查询cscope。所有的cscope查询选项都可用除了数字5(“修改这个匹配模式”)。

       s: Find this C symbol

              使用方法:

       t: Find assignments to

                     :cs find {querytype} {name}

help : Show this message              (Usage: help)

              其中:

kill : Kill a connection              (Usage: kill #)

                     {querytype} 即相对应于实际的cscope行接口数字,同时也相对应于nvi命令:

reset: Reinit all connections         (Usage: reset)

                            0或者s   —— 查找这个C符号

show : Show connections               (Usage: show)

                            1或者g  —— 查找这个定义

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

                            2或者d  —— 查找被这个函数调用的函数(们)

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

                            3或者c  —— 查找调用这个函数的函数(们)

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

                            4或者t   —— 查找这个字符串

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

                            6或者e  —— 查找这个egrep匹配模式

t:查找指定的字符串

                            7或者f   —— 查找这个文件

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

                            8或者i   —— 查找#include这个文件的文件(们)

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

              实例:(#号后为注释)

i:查找包含本文件的文

                     :cscope find c ftpd_send_resp                     # 查找所有调用这个函数的函数(们)

当然在底行模式下介键入 help 会弹出 vim的帮助。

                     :cscope find 3 ftpd_send_resp                     # 和上面结果一样

2,使用cscope查找do_fork函数的定义:

                    

在vim命令行下执行:

                     :cscope find 0 FTPD_CHECK_LOGIN       # 查找FTPD_CHECK_LOGIN这个符号

:cs f g do_fork

              执行结果如下:

就可以查看do_fork的全局定义了。

                     Cscope tag: FTPD_CHECK_LOGIN                   

cscope常用快捷键:

   #   line  filename / context / line

先按 ctrl+ 然后 再按以下键: 

   1     19  ftpd.h <<GLOBAL>>

1.                   c: 查找该函数被调用的位置  

             #define FTPD_CHECK_LOGIN()

2.                   d: 查找该函数调用了哪些函数  

   2    648  ftpd.c <<ftpd_do_pwd>>

 

             FTPD_CHECK_LOGIN();

3.                   e: 查找指定的正规表达式 f: 查找指定的文件  

本文由彩运网网址发布于网络安全,转载请注明出处:Cscope的使用(领略Vim + Cscope的强大魅力)彩运网

相关阅读