工具
分析源码,首先对工具的准备很重要,在windows有阅读源码的利器source insight,但是由于我的日常系统是centos,并且不想在虚拟机下进行分析,所以找了一些linux阅读源码的工具。
我使用的主要工具是:ctags+cscope
接下来我简单介绍一下这些工具的使用
ctags的使用
在源码根目录执行ctags -R
命令,递归的为源码建立tags,在根目录会生成一个Tags的文件,存放各种函数和变量的tag。
让光标停在函数/变量上,ctrl + ]
即可跳转到定义处,ctrl + t
可以回到你跳转前的位置。
如果文件太多了,用这个可能不太好使了。所以下面推荐cscope(一般是内建的)
cscope的使用
在源码根目录运行cscope -Rbq,就会生成cscope.out文件(索引数据库)
- R:在生成索引文件时,搜索子目录树中的代码
- b:只生成索引文件,不进入cscope的界面
- q:生成cscope.in.out文件和cscope.po.out文件,加快cscope索引速度
在vim中执行cs add cscope.out
添加数据库
接下来查询命令:cs find s var
(x代表查询选项,var表示要查找的函数/变量名)
大致有以下8种查询方式:
- s:查找C语言符号,即查找函数名、宏、枚举值出现的地方
- g:查找函数、宏、枚举等定义的位置
- d:查找本函数调用的函数
- c:查找调用本函数的函数
- t:查找指定的字符串
- e:查找egrep模式
- f:查找并打开文件
- i:查找包含本文件的文件
参考资料
主要参考了官方的文档http://www.wangafu.net/~nickm/libevent-book/
以及 http://blog.csdn.net/sparkliang 这系列的博客