cscope 的工作需要 vim、ctags 的配合,它们都是基于命令行的。
下面只是给出了三种工具的常用方法,更多功能可查看 man 手册,或者官方文档
二、Ctags
安装:
apt-get install ctags
在源代码根目录下执行 ctags -R * 命令用来为程序源代码生成标签文件,其-R 选项表示递
归操作,同时为子目录也生成标签文件。vim 利用生成的标签文件,可以进行相应检索、并
在不同的文件 C 语言元素之间来回切换。
在 vim 中 ctags 的简单使用
1) 跳转到指定的函数进入 vim 后,用 “:tag func_name“ 跳到函数 func_name 处。使用 tag
命令时,可以使用 TAB 键进行匹配查找,继续按 TAB 键向下切换。
某个函数有多个定义时
:tag
跳到第一个定义处,优先跳转到当前文件
:tnext
跳到第一个
:tfirst
跳到前 count 个
:[count]tprevious
跳到后 count 个
:[count]tnext
跳到最后一个
:tlast
你也可以在所有 tagname 中选择:
:tselect tagname
如果想跳到包含 block 的标识符:“tag /block” 然后用 TAB 键来选择。这里'/'就是告诉 vim
'block'是一个语句块标签。
2)用“CTRL + ]“快捷键,跳转到光标所在函数标识符的定义处。
3)使用“CTRL + T”退回上层。如果想在以 write_开头的标识符中选择一下, :tselect /^
write_ 这里,'^'表示开头,同理,'$'表示末尾。多个同名的标识符
三、debian 默认没有安装 cscope
一、安装:atp-get install cscope
运行 cscope 命令,出现两个面板,上方是一个查找结果的显示面板,下方是一个查找条件
指定面板。使用 TAB 键在两个面板间切换,也可使用上下左右方向件和翻页键在同一面板内
贴换位置。选中显示面板的某个项,回车即可进入该文件,这是调用 vim 打开文件,这时就
可以结合 ctags 使用了。当然也可以直接使用 vim 打开文件,结合 ctags 阅读源码。
使用前,必须现使用“cscope-indexer -r”命令递归生成索引信息文件。特殊情况下,还需
要用户使用 find 命令,主动生成索引信息文件,并指定给 cscope 工具。 cscope 提供了如下
九种查询方式:
1.查找指定的 C 符号
2.查找指定的全局定义
3.查找指定函数调用的函数
4.查找调用指定函数的函数
5.查找字符串
6.修改指定字符串
7.查找匹配字符
8.查找指定文件
9.指定引用头文件进行查找
二.首先需要为你的代码生成一个 cscope 数据库。生成数据库很简单,在你的项目根目录运行下面的
命令:
cscope -Rbq
如果不是 c 代码,使用:
$ find ./ -name "*.c" -or -name "*.h" -or -name "*.cpp" -or -name "*.S" | cscope
-Rbq
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中 cscope.out
是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快 cscope 的索引速度。
具体的参数的含义可以通过:man cscope 得到。-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入 cscope 的界面
-q: 生成 cscope.in.out 和 cscope.po.out 文件,加快 cscope 的索引速度
-k: 在生成索引文件时,不搜索/usr/include 目录
-i: 如果保存文件列表的文件名不是 cscope.files 时,需要加此选项告诉 cscope 到哪儿去找源文件
列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir: 在-I 选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
三在 VIM 中使用 cscope
1 、用 vim 编辑的时候:
vim FILENAME.c
2 把生成的 cscope 文件导入到 vim 中来
:cs add /路径/cscope.out 代码所在目录
我习惯现切换到代码所在目录再操作,所以直接使用:
:cs add cscope.out 就可以了。
3 查看是否已经连接到对应数据库
:cs s
四.一般源文件中生成索引文件
为了方便使用,编写了下面的脚本来更新 cscope 和 ctags 的索引文件:
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
其中 cscope.out 是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快 cscope 的索引
速度。
这个脚本,首先使用 find 命令,查找当前目录及子目录中所有后缀名为".h", ".c"和".c"的文件,并把
查找结果重定向到文件 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,这样,你不用切换到你数据库文件所在的目录也可
以使用它了。
五,在 VIM 使用 cscope 查找
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 命令行下执行:
:cs add cscope.out
在 vim 命令行下执行:
:cs help
cscope commands:
add : Add a new database
find : Query for a pattern
(Usage: add file|dir [pre-path] [flags])
(Usage: find c|d|e|f|g|i|s|t name)
help : Show this message
kill : Kill a connection
(Usage: help)
(Usage: kill #)
reset: Reinit all connections
show : Show connections
(Usage: reset)
(Usage: show)
s: 查找 C 语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似 ctags 所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找 egrep 模式,相当于 egrep 功能,但查找速度快多了
f: 查找并打开文件,类似 vim 的 find 功能
i: 查找包含本文件的文
2,使用 cscope 查找 do_fork 函数的定义:
在 vim 命令行下执行:
:cs f g do_fork
在编辑模式下用 ctrl+o 可以暂时进行命令模式
[{
]}
[[
]]
][
[]
{
}
#
命令跳转到当前代码块的开头,
会跳转到当前代码块的末尾.
向前查找一个函数的开始
向后查找一个函数的开始
向前查找一个函数的结尾,
向后查找一个函数的结尾,
到前一个空行上
到下一个空行上
到与当前单词相同的上一个单词上
* 到与当前单词相同的下一个单词上
% 可以让光标从它当前所在的括号跳转到与它相匹配的括号上去,
gD 查询变量,只在本文件中
gd 查询变量, 只在本函数中
[i
查询变量的定义
[
set makeprg=nmake 后面 nmake 可自己定义,一般不用定义
:make 编译程序
:cnext 跳到下一个编译错误
:cc 看完整的错误信息
:clist 看所有错误信息
:e b
q: 列出命令窗口
CTRL+] 跳转 tags 定义的地方=
ctrl+t 返回调用 tag 的地方
Vim 有一种记录宏的机制。你键入"qa"开始把一段宏记录入寄存器变量`a'中。按下来你可以象平常一
样键入你要的操作, 只是这些操作都会被 Vim 记录进它命名为`a'的宏中, 再次再下"q"键, 就结束了宏
`a'的录制。当你要重复执行你刚才记录的那些操作时只要使用"@a"命令。共有 26 个可用的寄存器供
你记录宏。
</div>
分析预测模型在机器学习中的应用之线性回归
回归能做任何事情 Continue reading