Vim系列 - 使用 Cscope 阅读源码
Posted StarfxTalk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim系列 - 使用 Cscope 阅读源码相关的知识,希望对你有一定的参考价值。
最近迷上了 nginx,逐渐接触到源码层面,于是有了阅读 Nginx 源码的需求,业界大名鼎鼎的 Source Insight 太贵,没办法,寻找简单的开源替代方案,于是就使用 Vim + Cscope 来搞了一下,使用下来的感受是搞定日常的读源码需求足够用。
Vim 对 Cscope 的依赖在大多数发行版的 Vim 中都是标配,所以只需要确保 Cscope 软件本身被安装就可以在 Vim 下正常使用。
为了让 Cscope “认识” 一个源码包,首先需要在源码包的根目录下使用
cscope -Rb
命令建立 Cscope 的数据文件 cscope.out,然后就可以在 Vim 里使用这个 cscope.out 文件来浏览这个源码包了。
cscope 最主要的命令有2条
:cs add <file-or-dir>
用来建立 Vim 和一个具体的 cscope.out 文件之间的联系,后续发出的所有查询都会在这个绑定的 cscope.out 文件里进行。
:cs find <query-type> <query-string>
或
:scs find <query-type> <query-string>
用来实施具体的查询。
:scs 和 :cs 命令的唯一区别是在打开一个新窗口展示搜索结果时,:scs 使用分割窗口的方法, 而不是完全覆盖旧窗口的方法。
<query-type> 一共有9种类型,翻译一下分别是:
0 or s:哪里使用了这个 symbol
1 or g:哪里定义了这个 symbol
2 or d:这个方法调用了哪些方法
3 or c:哪些方法调用了这个方法
4 or t:哪里出现了这个字符串
6 or e:哪里出现了这个正则匹配(格式同 egrep)
7 or f:(还没搞明白行为,以后再说)
8 or i:哪里 include 了这个文件
9 or a:哪里为这个 symbol 赋了值
下面说几个场景:
当看到 ngx_http_header_t 这个结构体时,想知道结构体的具体信息,可以使用
:cs find g ngx_http_header_t
查看。当然也可以使用
:cs find s ngx_http_header_t
来查看还有哪里使用到了这个结构体。当看到 ngx_http_init_phases 这个方法申明时,想查看方法的具体信息,可以使用
:cs find d ngx_http_init_phases
查看(搜索结构中任选一个)。当然也可以使用
:cs find c ngx_http_init_phases
来查看都有哪些地方调用了这个方法。当想查看 HTTP 头部 X-Real-IP 的处理细节时,可以使用
:cs find t X-Real-IP
来查看。当看到 ngx_http.h 时候,想查看都有哪些文件 include 了这个文件,可以使用
:cs find i ngx_http.h
来查看。当想查找变量 ngx_test_config 在哪些地方被赋值时,可以使用
:cs find a ngx_test_config
来查看。
下面逐个演示。
happy hacking.
以上是关于Vim系列 - 使用 Cscope 阅读源码的主要内容,如果未能解决你的问题,请参考以下文章