Linux下源码阅读工具ctags+vim中安装ctags
代码阅读工具简介对于学习Linux内核的人来说,源代码的阅读尤为重要。因为所有设计思想、内部机制都是以代码的形式实现,所有的资料也都是为了更好的诠释代码。那么一个好的阅读工具,能够提高阅读的效率和效果。常见的代码阅读工具有,Source Navigator、Source Insight、lxr、Cscope等。• "Source Navigator"是红帽子公司的,
·
代码阅读工具简介
对于学习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即可。
更多推荐
已为社区贡献3条内容
所有评论(0)