阅读代码在学习编程或开发软件的过程中十分重要,几个月来阅读和改写代码的经历也让我意识到,拥有简洁好用的工具对更快更好地理解代码是多么关键。cscope 就是一个非常好的代码分析工具,当其与 emacs 双剑合璧时,甚至能带来酣畅淋漓的快感。
还要感谢春哥,我至今 emacs 的大部分配置都来自于春哥。当我今年早些时候从配置文件中找到 cscope 的有关配置时,因为好奇而上网搜了一下,略作小试。而几个月后,当我自豪地给身边的人介绍起 cscope 的时候,我知道,恐怕我再也离不开它了。
- 安装配置
能在 emacs 中使用的 cscope 叫做 xcscope,安装很简单:
# apt-get install xcscope-el
安装完成后,只需要在 .emacs 文件中加入下面的配置:
(require 'xcscope)
通常,一个项目的代码都在一个文件夹(包括其子文件夹)下,在搜索代码中的某个变量或函数时,我们希望搜索的范围是该项目的所有代码。为此,首先在项目的最高层目录下执行下面的命令生成代码数据库:
$ cscope-indexer -r
其中的 -r 选项代表递归扫面各个子目录。该命令执行完后会在当前目录下生成 cscope-files 和 cscope.out 两个文件,其中包含着项目中的文件名、变量函数名等信息,供检索时使用。
进行完上述步骤后,在浏览代码时就可以直接用快捷键进行查找等操作了。xcscope 的快捷键都是绑定到 C-c s 前缀上的,如果嫌麻烦,可以绑定到其他键上。但就我的使用感受来说,用默认快捷键并不麻烦。主要快捷键如下(英文也不难理解,还可以方便记忆):
C-c s s Find symbol. C-c s d Find global definition. C-c s g Find global definition (alternate binding). C-c s G Find global definition without prompting. C-c s c Find functions calling a function. C-c s C Find called functions. C-c s t Find text string. C-c s e Find egrep pattern. C-c s f Find a file. C-c s i Find files #including a file.
搜索出的结果会显示在一个叫做 cscope 的 buffer 中,包含文件名、行号和相应行的具体内容。当光标在某一条目上时回车可以直接跳转到相应位置。在列出的结果间可以通过 n 和 p 两个键跳转:
n 下一个 symbol。 p 上一个 symbol。 N 下一个文件。 P 上一个文件。
基本的使用方法就如上所示。相信在它的帮助下,阅读代码会变得更轻松。