代码阅读主要是使用source insight 和 vi+cscope+ctag。 以前使用SI阅读过btreplay的源代码,有点熟悉,只要建立工程,然后导入文件,就可以很方便的阅读源代码了。而vi+cscope+ctag稍微麻烦一点,但是简单的操作也好上手。
vi的使用
一般vi自己的功能有限,需要装vim,如果是ubuntu系统的话,只需要apt-get vim貌似就可以了。
在工作用的虚拟服务器中vim已经装好,所以就没有去管在centos中如何装vim,之后编辑/root/.vimrc,
我的.vimrc文件如下(前面一部分是原来就有的,应该是学长以前写的,我只是增加了行号和语法高亮等):
set ai
set ci
set cindent
set tbs
set ts=4
set autoindent
set hlsearch
set number
syntax on
set showmach
set mouse=a
此外,使用split和vsplit可以在vi中分屏,之后可使用Ctrl+W(Ctrl+shift+w)在个窗口中切换,很奇怪的是我的敲两次才行。
cscope的使用
首先,cscope和ctag是两回事,一开始我没弄清楚,有点迷茫。
使用cscpe -Rbkq命令后,当前目录中会多出这几个文件:cscope.out, cscope.in.out, cscope.po.out,
其中cscope.out是索引文件,cscope.in.out, cscope.po.out是由于-q选项,
而产生的倒排索引(每次我从cscope中退出后,这两个文件就没了,不知道是不是操作失误了)。
-R recurse subdirectories during search for source file
-k "kernel mode",turn off the use of defualt include dir when buliding the datebase,
since kernel source trees generally do not use it
-b build the cross-reference only(“即 不进入cscope界面”)
-q enable fast symbol lookup via a inverted index
之后,就会出现cscope界面,在这里主要用到上下方向键、空格键、<Tab>键和Ctrl+d。
找到所需的文件,点击回车后进入,之后就轮到ctag发挥作用了。
vi中使用tag进行查找之前,需要使用 ctags -R生成一个tags文件,进入vi后使用:tag XXX就可以查找了,其他的命令为:
:tnext 跳到下一个
:tfirst 跳到第一个
:[n]tprevious 跳到n个前
:[n]tnext 跳到n个后
:tlast 跳到最后一个
Ctrl+[跳转到该函数的首行,Ctrl+]跳转到该函数的末行
此外,比较让人高兴的是,tag可以实现在多个文件之间跳转,且在输入命令时可以用<tab>补全,
以上的内容是中午写的,下午和晚上继续使用时,发现有些功能还是不熟,有些为达到目的而进行的操作还需要进一步学习和确认,其实,还有一点就是我还 不知道vi+ctags+cscope到底能达到多强大的地步。 之后,我在看了下《跟我一起学写Makefile》,感觉这本书也不是很好,不便于快速的上手,实用性不是很强,只看了半本。记得以前看过的《Linux 编程24学时教程》中写的蛮好的,可惜找不到电子档。不过如果只是要能看懂ldd里面的Makefile的话,貌似现在具备的知识就已经可以了。