emacs中etags等的使用

来源:互联网 发布:mac上什么输入法好用 编辑:程序博客网 时间:2024/04/28 08:42

在windows下常用的源代码查看工具是Source Inside。在linux下我习惯用用etags、gtags、grep来查看源代码。

etags用于生成TAGS文件来提供emacs快速浏览C/C++源代码,它的最大作用就是能够快速跳转到函数定义、宏定义、数据结构定义、全局变量定义等。
etags常常和find命令一同使用来生成TAGS文件,如下所示:

find . -name '*.[ch]' | xargs etags -a
etags常用命令:
M-visit-tags-table:选择生成TAGS文件,
M-tags-reset-tags-tables:重新设置tag table
M-. 查找一个tag,比如函数定义类型定义等。
C-u M-. 查找下一个tag的位置
M-* 回到上一次运行M-.前的光标位置。

.emacs中加入这样的语句:
(setq tags-file-name /usr/src/linux/TAGS")
这样emacs就会自动读取这个tags文件的内容。

对于一些project,makefile里已经做好了这一步,例如对工程glibc,执行make -f MakeTAGS

有了etags,为什么还要gtags?
你可能会遇到这样的情况:有一个函数myfunction,在工程的源代码里被调用了十几次,你想把 它们都找出来,这时候,etags只能找到它的定义,并不能找到它的调用。而使用gtags就能够实现这样的功能(当然,还有很多的办法)。
要使用gtags,首先要装global包:
apt-get install global
接着在project是目录下执行:
gtags
你会发现在当前目录多了几个文件:GPATH、GRTAGS、GSYMS、GTAGS。它们就是用于在源文件之间快速跳转。
在emacs里进入到gtags模式,执行“M-x gtags-mode”。
这样就可以使用“gtags-find-pattern”和“gtags-find-symbol”来查找函数调用和声明以及符号声明。

cscope

cscope只针对C语言。

sudo apt-get install cscope

在.emacs里加入这一句:

(require 'xcscope)

在工程的目录里设置cscope的工作目录,并在该目录下生成cscope.file和scope.out文件:

M-x cscope-set-initial-directory

M-x cscope-create-list-of-files-to-index

好了,如果要找一个符号的定义,那么就执行:

M-x cscope-find-global-definition

找调用某个函数的函数,执行:

M-x cscope-find-functions-calling-this-function

C-c s C-h 能找到更多关系cscope的命令。

grep也是一个很好的代码查找工具。例如在一个工程里查找函数名就schedule的函数的定义以及引用,

grep -n -e schedule -r --include=*.[hc] .

如图所示:

使用grep查看源代码

小结:
配合使用etags的“find-tag”(也就是M-.)命令和gtags的“gtags-find-symbol”命令、rgrep命令,能够更方便、快捷地查找源代码。

原创粉丝点击