在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] .
如图所示:
小结:
配合使用etags的“find-tag”(也就是M-.)命令和gtags的“gtags-find-symbol”命令、rgrep命令,能够更方便、快捷地查找源代码。
分享到:
相关推荐
lein-codeindex:使用etags,ctags或gtags的索引代码
步骤2,浏览代码 错误报告 安装 请安装MELPA的Advisor counsel-etags 。 如果存在Exuberant Ctags或Universal Ctags ,则此程序可以直接使用。 积极维护并强烈推荐Universal Ctags。 否则,请自定义counsel
ctags-etags-5.8-2.el6.i686.rpm
官方离线安装包,亲测可用
离线安装包,亲测可用
官方离线安装包,亲测可用
使用ETags减少Web应用带宽和负载
Nginx Static Etags 是一个 Nginx 扩展模块,实现为静态文件生成 ETag 的功能。不过 Nginx 从 1.3.3 版本开始就可通过 etag on | off; 指令来实现同样功能,详情请看这里。使用方法:mkdir ~/src cd ~/src git...
st, 用于服务 static 文件的node 模块 etags caching等 st用于服务 static 文件的MODULE 。 etags 。caching等。用法下面是一些非常简单的用法示例。只要在http服务器url的root 中服务cwd中的文件:var st = require...
该项目伴随着 OPI 博客上的一篇文章: :
当您使用文件处理程序或reply.file()方法时,hapi会自动为您的响应生成ETag头。 但是,如果您使用任何其他类型的响应(例如JSON,HTML,文本等),则不会免费获得ETag。 这个插件可以解决这个问题! ##...
GNU GLOBAL是一个软件工具,用来作程式码标签,以利于阅读程式码。可以运作在多种不同环境(如GNU Emacs,Vim,GNU less,GNU Bash或网页浏览器等),让...功能类似于ctags,etags或cscope。 win 环境下 global工具包
srpmix是用于扩展src.rpm并创建多种索引文件的工具,例如ctags,etags,cscope,gonzui等。
官方离线安装包,亲测可用
SCTags是Scala语言的ctags和etags提取器。 如果强制使用Scala以外的语言,它将退回到ctags 用法 sctags [-f|-o file] [-R|--recurse] [--list-languages] [--version] -f file | -o file sets the file the tags ...
etags-中间件 一个 HttpKernelInterface 中间件,用于根据响应内容添加 ETag 标头。 这个包应该与 StackPHP HttpKernelInterface 框架一起工作。 安装 通过作曲家 { " require " : { " aranw/etags-middleware " :...
gem 'rails_weak_etags' 然后执行: $ bundle 或者自己安装: $ gem install rails_weak_etags 用法 贡献 分叉吧 创建您的功能分支( git checkout -b my-new-feature ) 提交您的更改( git commit -am 'Add ...
对于使用windows IIS的服务器,则需要使用第三方的DLL文件更有效些,具体使用方法:下载REMEtags,RemEtag.zip,解压到服务器下的文件夹下,再启用ISAPI,即把RemEtag.dll添加到ISAPI应用下运行,再重启IIS即可生效。...
这样,与使用ctags或etags相比,代码将更易于浏览。 最初的想法来自LászlóLövei。 由于:在Vim中编辑Erlang文件时不是关键字字符,因此该存储库中还包含一个Vim插件,该插件修改了以下常规模式命令,以在将Erlang...