Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1069098
  • 博文数量: 277
  • 博客积分: 8313
  • 博客等级: 中将
  • 技术积分: 2976
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 11:25
文章分类

全部博文(277)

文章存档

2013年(17)

2012年(66)

2011年(104)

2010年(90)

我的朋友

分类: LINUX

2010-05-19 18:38:35

    人说,磨刀不误砍材工。可是学习linux内核已经一年啦,一直都在逃避使用VIM&ctags&cscope之类的阅读源码。一方面,搞不明白他们之间是怎么一回事,就觉得糊里糊涂的。在网上也看了一些文章,可还是晕晕乎乎。另一方面,有LXR的方便,于是就给自己一次次的逃避找到了借口。最近,网络总是出问题,才深深体会到仅仅依靠网络还是不行的。于是乎,终于下定决心要好好挖掘一下VIM的潜力。以前就看到过这样的说法:VIM是程序员写的,它替程序员考虑到了所有的可能性、、、、、、可是,它到底有多么强大,还没有真正体验过。
    早上请教了一下师兄,其实只需要Vim+ctags就可以方便的查阅linux内核源代码了。自己以前也是被别人说的ctags、cscope、 tlist好几个工具共用,给迷糊了,总是不知道该用那个,也不知道它们之间有没有什么关系。其实,对于初次使用者,可以先用起来,然后在慢慢的探索,如何快捷方便的使用工具。
先说说ctags吧!其实它只是用来生成一个tags文件,也就是把源代码中的对象找到、并记录下来,放到tags文件里。其他的工作就交给VIM来完成了。
“tags” 文件中包括这些对象的列表:① 用#define定义的宏② 枚举型变量的值③ 函数的定义、原型和声明④名字空间(namespace)⑤ 类型定义(typedefs)⑥变量(包括定义和声明)⑦ 类(class)、结构(struct)、枚举类型(enum)和联合(union)类、结构和联合中成员变量或函数
下面开始如何用VIM+ctags查看源码:
首先,要安装ctags。
wuting@wuting-desktop:~$ sudo apt-get install ctags
然后,进入到源码目录下:使用ctag -R命令生成tags文件。(参数-R表示,将该目录下所有的文件都包含在内)
wuting@wuting-desktop:/usr/src/linux-2.6.30.5$ sudo tags -R
也可以使用make tags命令,该命令只是将你选用的体系结构的文件包含到tags文件中。tags -R是将所有的体系结构都包含在内。
wuting@wuting-desktop:/usr/src/linux-2.6.30.5$ sudo make tags
这里可能需要一些时间,耐心等待,毕竟内核文件还是比较大的。
接下来,就可以使用命令查找你需要的函数或结构体之类的啦!一些常用的查找方法如下:
 1) 用命令行。在运行vim的时候加上"-t"参数,(这里一定要与生成tags文件时在同一目录下才可以)例如:
# vim -t foo_bar
这个命令将打开定义"foo_bar"(变量或函数或其它)的文件,并把光标定位到这一行。
 2) 在vim已打开的任意一个文件中,使vim处于命令模式下,使用":tag"命令,例如:
:tagfoo_bar
如果要查找的是结构体的定义可以使用ts命令,同样是在命令行模式下,输入:ts  XX(要找的结构体)
这时vim会为你展现出许多个,用空格进行翻页,记下你要找的一个对应的数字,一直按空格键,直到提示你输入数字。输入对应的数字,回车就会跳转到你要查找的结构体定义处。
3) 最方便的方法是把光标移到变量名或函数名上,然后按下" Ctrl-]";用"Ctrl-o"退回原来的地方。用 Ctrl-]延着调用树向前跳转, 用Ctrl-t向回跳转(当然啦,这是建立你已经打开文件的基础之上喽!)
 4) 分割窗口
":tag"命令会将当前窗口的文件替换为包含新函数的文件。怎样才能同时查看两个文件呢?你可以使用 ":split"命令将窗口分开然后再用":tag"命令。vim 有个缩写命令可以做到这些:
:stag tagname
使用下面的命令可以分割当前窗口并跳转到光标下的标签:
Ctrl-w-]
如果指定了计数参数,新窗口将包含指定的那么多行。
有这些用法基本上就够用了,再多一些基本上就是VIM的灵活运用了。另外,如果这些还不能满足你的要求时,可以使用find和grep来帮忙。假如要找fork.c,就可以用在内核目录下输入:find  -name  fork.c
wuting@wuting-desktop:/usr/src/linux-2.6.30.5$ find -name fork.c
./kernel/fork.c

     刚开始使用时也不能贪多,关键是要熟练的运用。如果一下子涉及的太多就可能会失去信心。(当然这是对于刚开始用,或者vim使用不熟练的人)。
阅读(1074) | 评论(0) | 转发(0) |
0

上一篇:内核IS_ERR宏解析

下一篇:补码

给主人留下些什么吧!~~