前言
  看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径。个人认为: 要完全掌握一个软件的方法只有阅读源码。
  在Windows下有sourceinsight这个源码阅读软件(虽然我没用过,但是网上评价还不错),由于我是个Linuxer,并不喜欢用Windows,所以自然是选择在Linux下阅读源码的工具了。
  下面我将逐一介绍在Linux下阅读源码的工具。

  vim+ctags+cscope
  源码阅读三剑客:vim配合ctags和cscope,足以在源代码里面自由翱翔,在函数和变量间自由跳转。
  安装
  sudo apt-get install vim ctags cscope
  vim
  vim的使用略过了,网上资料很多,不是一篇文章能说完的,未来我可能会写一篇vim的使用心得。推荐一篇简明 Vim 练级攻略,看完差不多会用了。
  ctags
  ctags的使用很简单,vim已经内置了对ctags的支持。
  首先在源代码根目录执行ctags -R,递归的为源码建立tags,在根目录会生成一个Tags的文件,存放各种函数和变量的tag,便于跳转:
  使光标在函数或变量上,Ctrl + ]即可跳转到其定义处
  Ctrl + t可以回到你跳转之前的位置
  对于简单的代码,ctags够用了,但是对于比较复杂的代码来说,ctags显得有点力不从心,于是,下一位剑客登场了。
  cscope
  vim同样内置了对cscope的支持。
  首先在源代码根目录执行cscope -Rbq,会生成cscope.out文件(索引数据库)
  -R: 在生成索引文件时,搜索子目录树中的代码
  -b: 只生成索引文件,不进入cscope的界面
  -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
  然后在vim中执行:cs add cscope.out,添加数据库。
  接下来可以使用:cs find x var进行查找。(x代表查询选项,var表示要查找的函数或变量名)
  cscope支持8种查询方式
  s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
  g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
  d: 查找本函数调用的函数
  c: 查找调用本函数的函数
  t: 查找指定的字符串
  e: 查找egrep模式,相当于egrep功能,但查找速度快多了
  f: 查找并打开文件,类似vim的find功能
  i: 查找包含本文件的文件
  例如,我们想在vim 7.0的源代码中查找调用do_cscope()函数的函数,我们可以输入:”:cs find c do_cscope“,回车后发现没有找到匹配的功能,可能并没有函数调用do_cscope()。我们再输入”:cs find s do_cscope“,查找这个C符号出现的位置,现在vim列出了这个符号出现的所有位置。
  每次都有输入cs find来查找数据是不是有点麻烦,有没有更方便的方法呢。当然有,vim的神奇之处在其可定制性。提供一份cscope的配置,将其放在.vimrc中即可。
  """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  " cscope setting
  """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=1
  set cst
  set nocsverb
  " add any database in current directory
  if filereadable("cscope.out")
  cs add cscope.out
  endif
  set csverb
  endif
  nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
  nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
  nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
  nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
  nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
  nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
  nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
  nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
  上面的配置即把Ctrl + @作为:cs find的快捷键,也是说要查找某个函数名,只需要把光标放在函数名上,按下Ctrl + @ + s即可,简直不能更方便。而且你可以自己修改配置,映射到自己觉得舒服的快捷键上。