admin 管理员组

文章数量: 1184232


2024年3月9日发(作者:while结构为什么叫条件循环)

目录

解压源代码,安装ctags,cscope

各个软件的版本

Vim的简单配置

在cscope界面中查询:

Vim中调用cscope进行查询(地行模式以及快捷键模式),

通过ctags实现查询(底行模式及快捷键)。

解压源代码,安装ctags,cscope

透过命令:sudo apt-get install ctags cscope这个命令安装这两个工具软件。

各个软件的版本

Ubuntu9.04环境下,vim版本7.2.79

Vim的简单配置

cscope在sourceforge的主页中有vim中使用cscope的方法,同时给出了一个vim的配置文件

在cscope界面中查询:

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

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

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

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

VIM使用cscope查找

1,加载文件

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

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

:cs add

在vim命令行下执行:

:cs help

cscope commands:

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

[flags])

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

c: Find functions calling this function

d: Find functions called by this function

e: Find this egrep pattern

f: Find this file

g: Find this definition

i: Find files #including this file

s: Find this C symbol

t: Find assignments to

help : Show this message (Usage: help)

kill : Kill a connection (Usage: kill #)

reset: Reinit all connections (Usage: reset)

show : Show connections (Usage: show)

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

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

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

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

t:查找指定的字符串

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

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

i:查找包含本文件的文

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

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

在vim命令行下执行:

:cs f g do_fork

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

cscope常用快捷键:

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

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

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

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

4. g: 查找指定标识符的定义位置

5. i: 查找该文件在哪些地方被包含

6. s: 查找指定标识符的使用位置

7. t: 查找指定的文本字符串

在VIM中使用tags查找

1) 跳转到指定的函数进入vim后,用 “:tag func_name“ 跳到函数func_name处。使用tag命令时,可以使用TAB键进行匹配查找,继续按TAB键向下切换。

某个函数有多个定义时

:tag

跳到第一个定义处,优先跳转到当前文件

:tnext

跳到第一个

:tfirst

跳到前count个

:[count]tpreviouss

跳到后count个

:[count]tnext

跳到最后一个

:tlast

你也可以在所有tagname中选择:

:tselect tagname

关于tags的其它用法可以在vim中执行”:help tags”命令进行查询。

在安装了cscope和ctags的情况下,以下命令特别好使,他们现在

数据库中查找,若没有则在ctags中查找

ctrl+]:在函数调用的地方跳转到函数定义的地方

ctrl+t:返回上一个查找的地方

首先在目录下建立cscope索引文件

find -name '*.c' >

cscope -Rbkq

这个命令会生成三个文件:, , 。

其中是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。

上面所用到的命令参数,含义如下:

-R: 在生成索引文件时,搜索子目录树中的代码

-b: 只生成索引文件,不进入cscope的界面

-k: 在生成索引文件时,不搜索/usr/include目录

-q: 生成和文件,加快cscope的索引速度

如果只希望 Cscope 关联起所有的 .c 文件,那么可以直接到工程的根目录下,输入:

$ cscope -Rbq

-R 表示递归地把所有子文件夹中的 source file 也关联进来

-b 表示只建立数据库文件 ,不进入 Cscope 的 GUI 界面

-q 会建立两个额外的 'inverted index' file: 和 ,以加快查找的速度

如果不希望把 /usr/include 中被工程文件包含的 .h 文件关联进来,就加 -k

如果要关联其他类型的文件(如 .cpp、.java等),就需要我们自己先生成一个

,把所有我们希望关联进去的文件都列在里面:

$ find /home/edelweiss/nbd/nbd-2.9.15/ -name '*.c' -o -name '*.cpp' -o -name '*.h'

> /home/edelweiss/

注意查找的路径一定要写成绝对路径,这样才能保证写入到 文件中的也是绝对路径。

之后就可以根据 建立数据库了:

$ cscope -bq -i /home/edelweiss/

ctag 和 cscope 的使用

都要在当前目录下,即你要查找的代码目录下。

ctag使用:

命令:ctags –R 生成tags文件

Cscope使用:

命令:find -name '*.c' -o -name '*.h' -o -name

'*.cpp'>

cscope -Rbkq

在源代码文件中:vim命令进入后执行

:cs add

只能在当前目录下使用vim命令时实现函数跳转(有的目录)

Vim 命令打开的文件,显示的时候分屏命令:

水平分屏命令为(:sp 文件路径和文件名)

垂直分屏命令为(:

vs 文件路径和文件名)


本文标签: 查找 文件 命令 函数 使用