使用gtags、etags、cscope、grep浏览源代码

在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命令,能够更方便、快捷地查找源代码。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值