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

Linux下源码阅读工具ctags+vim中安装ctags

2009-12-14 12:26 501 查看
代码阅读工具简介

对于学习Linux内核的人来说,源代码的阅读尤为重要。因为所有设计思想、内部机制都是

以代码的形式实现,所有的资料也都是为了更好的诠释代码。那么一个好的阅读工具,能

够提高阅读的效率和效果。常见的代码阅读工具有,Source Navigator、Source Insight

、lxr、Cscope等。

• "Source Navigator"是红帽子公司的,以GNU GPL发布,可从官方网站[1]下载使用。

• "Source Insight"目前只有Windows平台的,官方网站[2]。需要注册才能使用,或者

从网上下载注册机生成注册码。在Linux下通过wine模拟虽然可以方便使用,但它毕竟

是Windows平台的东西,并不能很自由的使用。

• lxr(linux cross reference)[3]为程序源代码建立索引数据库,利用perl脚本CGI动态

生成包含源码的web页面,你可以用任何一种浏览器查阅。缺点是需要服务器支持,还

有速度。

• "Cscope"[4]为终端下的代码阅读工具,资源消耗少,对那些忠于命令行的行操作的人

,使用起来更加方便、灵活。这也是这篇文章推荐使用的一个重要原因。也有人把

Cscope和Emasc绑定阅读源码。当然工具的选取,也取决于个人习惯。

Vim+Ctags+Cscope

cscope的工作需要vim、ctags的配合,它们都是基于命令行的。在Ubuntu下,用户只需执

行“sudo apt-get install cscope ctags vim”即可完成软件安装。

下面只是给出了三种工具的常用方法,更多功能可查看man手册,或者官方文档。

Vim

vim被看作是专门为程序员打造的文本编辑器,其丰富的编辑命令都是常用的简单字符,用

户很容易上手。vim可对180多种语言的语法高亮,对C语言自动缩进,真则表达式字符匹配

查找,功能强大,并支持多个操作系统平台。关于vim的使用,这里不做讲解。vim中文文

档[5]。

在Ubuntu下默认安装的vim,没有语法加亮功能。所以需要安装vim-full,并在vim 配置

文件 ~/.vimrc中添加一行 "syntax on" 这样在vim中打开的源码就有了语法高亮显示。

vim自带了很多颜色主题,可以直接选取下面一行添加到vim配置文件当中,重新打开vim即

可生效。

1、配置文件的位置

在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件。

2、设置语法高亮显示

1) 打开vimrc,添加以下语句来使得语法高亮显示:

syntax on

2) 如果此时语法还是没有高亮显示,那么在/etc目录下的profile文件中添加以下语句:

export TERM=xterm-color

3、设置Windows风格的C/C++自动缩进(添加以下set语句到vimrc中)

1)不讨论制表符为8还是为4较好,这里设置(软)制表符宽度为4:

set tabstop=4

set softtabstop=4

2)设置缩进的空格数为4

set shiftwidth=4

3)设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置:

set autoindent

4)设置使用 C/C++ 语言的自动缩进方式:

set cindent

5)设置C/C++语言的具体缩进方式(以我的windows风格为例):

set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s

6)如果想在左侧显示文本的行号,可以用以下语句:

set nu

7)最后,如果没有下列语句,就加上吧:

if &term=="xterm"

set t_Co=8

set t_Sb=^[[4%dm

set t_Sf=^[[3%dm

endif

PS:

自动缩进有两个选项:

代码:

set autoindent

set cindent

autoindent 就是自动缩进的意思,当你在输入状态用回车键插入一个新行,或者在 normal 状态用 o 或者 O

插入一个新行时,autoindent

会自动地将当前行的缩进拷贝到新行,也就是"自动对齐”,当然了,如果你在新行没有输入任何字符,那么这个缩进将自动删除。

cindent 就不同了,它会按照 C 语言的语法,自动地调整缩进的长度,比如,当你输入了半条语句然后回车时,

缩进会自动增加一个 TABSTOP 值,当你键入了一个右花括号时,会自动减少一个 TABSTOP 值。

set fenc=utf-8 "设定默认解码

set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936

set nocp "或者 set nocompatible 用于关闭VI的兼容模式

set number "显示行号

set ai "或者 set autoindent vim使用自动对齐,也就是把当前行的对齐格式应用到下一行

set si "或者 set smartindent 依据上面的对齐格式,智能的选择对齐方式

set tabstop=4 "设置tab键为4个空格

set sw=4 "或者 set shiftwidth 设置当行之间交错时使用4个空格

set ruler "设置在编辑过程中,于右下角显示光标位置的状态行

set incsearch "设置增量搜索,这样的查询比较smart

set showmatch "高亮显示匹配的括号

set matchtime=5 "匹配括号高亮时间(单位为 1/10 s) set ignorecase "在搜索的时候忽略大小写

syntax on "高亮语法

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_ 这里,'^'表示开头,同理,'$'表示末尾。多个同名的标识符

Cscope

运行cscope命令,出现两个面板,上方是一个查找结果的显示面板,下方是一个查找条件

指定面板。使用TAB键在两个面板间切换,也可使用上下左右方向件和翻页键在同一面板内

贴换位置。选中显示面板的某个项,回车即可进入该文件,这是调用vim打开文件,这时就

可以结合ctags使用了。当然也可以直接使用vim打开文件,结合ctags阅读源码。

使用前,必须现使用“cscope-indexer -r”命令递归生成索引信息文件。特殊情况下,还需

要用户使用find命令,主动生成索引信息文件,并指定给cscope工具。 cscope提供了如下

九种查询方式:

Find this C symbol:

#查找指定的C符号

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:

#指定引用头文件进行查找

在对应某一项中输入查找条件,回车即可进行查询,并将结果显示在显示面板。

应用实例

下面以使用cscope阅读内核源代码为例:

$ wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.6.tar.bz2

#从Linux内核官网下载内核源代码

$ tar xvfj linux-2.6.27.6.tar.bz2

#解压文件

$ cd linux-2.6.27.6

#进入源代码根目录

$ ctags -r

#递归生成标签文件

$ cscope-indexer -r

#递归生成索引信息文件

$ cscope

#使用cscope阅读源码

标签文件、索引信息文件只需要第一次或者代码发生变动时生成,以后使用直接运行

cscope即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: