Live & Learn
分类: LINUX
2011-11-14 22:44:51
在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命令,能够更方 便、快捷地查找源代码
==========================================================
from: http://blog.csdn.net/meteor1113/archive/2009/07/16/4349261.aspx
学习了很多年的emacs,却一直都不能熟练使用,可能有工作太忙的原因,不过最大的原因还是没有坚持。 最近几天不忙了,又把emacs捡了起来,希望能坚持下去吧。
这一次直接使用了emacs23,是一个正在开发中的版本,不过因为对国际化支持得好了,我仍然选择了使用它。这个版本不用再像emacs21那样 自己安装mule了,而且在日文平台上也不用写一堆配置文件了。
目前我在win32和linux平台下除了emacs自带的lisp之外还使用了另外几个扩展:muse、cedet、ecb、cscope等。
muse是用来写日记的,也就是以前的emacs-wiki,现在这个文章就是用muse写的。muse的用法很简单,直接把下载的muse解压到 site-lisp里,打开emacs后load-library muse-mode和muse-html就可以了。前者是用来加载muse模式用的,只要加载了muse-mode,就可以在任何时候执行muse- mode切换到muse模式进行编辑,如果一个文件的扩展名是muse,那么打开这个文件的时候还会自动切换到muse模式下。而muse-html是用 来发布用的,它支持html,xhtml,xhtml1.0,xhtml1.1这几种方式,只要在muse模式下用C-c C-t(muse-project-publish-this-file)或者C-c C-T(muse-publish-this-file)就可以发布当前文件了。另外,还有muse-latex,muse-texinfo,muse- docbook等可以用来支持发布不同的格式。
cedet,用来进行代码补全,它的semantic是基于语法分析的,代码补全很智能,而且还有菜单,很好用。
ecb是用来读c/c++代码用的,它把emacs装扮得像一个IDE了。
cscope是用来替代(也不完全是替代,目前我是把cscope和etags结合起来使用的)etags的,用来查找c/c++代码中的符号。 cscope比etags的查找功能更强,不过我喜欢etags的alt+.的简洁用法,所以把etags也留下来了。
装扩展的方法很简单,直接从网上下载代码,解压到site-lisp目录下,在.emacs中require需要的扩展就可以 了。如果像我这么懒的话,连.emacs都可以不用,直接打开emacs,然后运行load-library命令载入就可以了。
==========================================================
from: http://blog.csdn.net/fyzhao/archive/2009/10/13/4658132.aspx
在emacs里可以用etags命令生成emacs专用的tags文件,有了此文件之后便可以使用一些emacs tags的命令,比如对于编辑C/C++程序的人员可以方便的定位一个函数的定义,或者对函数名进行自动补齐:
上述命令可以在当前目录查找所有的.h和.cpp文件并把它们的摘要提取出来做成TAGS文件,具体的etags的用法可以看一下etags的 manual。
在.emacs中加入这样的语句:
这样emacs就会自动读取这个tags文件的内容。
几个重要的命令。
2. 参考:一些整合的快捷键
易于编译和TAGS的使用,搜集自 zslevin 的帖子(LinuxForum GNU Emacs/XEmacs)
定义按键,在生成相应 tag 文件时,比如一个目录下所有的 *.cpp 和 *.h 文件使用这样的正则表达式 *.[ch]*,在下面的 C-F7 中可能会用到。
上面定义的命令需要用到的函数:
==========================================================
from: http://blog.chinaunix.net/u/15586/showart_1190390.html
在Emacs中使用etags来浏览代码 对于代码量比较大的情况而言,浏览代码就是一件很重要的事情了。在vi中提供了一个比较好的插件来进行相关操作,但是Emacs又该怎么办呢?
使用Emacs浏览代码有三个方案,最简单的就是etags,第二种是cscope,第三种暂时想不起来了。今天只说最简单的方式,由简入难吧。
我本以为etags像其它插件一样,就是一个el文件,然后执行一下,后来发现我错了。etags其实是个shell命令。
1).安装etags,一般来讲,这是emacs的内建程式;
2).在当前目录建立tag table:M-! etags *.[ch];
3).使用:
A.M-. :跳至相应的函数定义处;
B.M-* :返回刚才的函数名处;
C.C-u M-. :如果emacs找错了,找下一个;
D.M-Tab :自动补齐函数名;
4).在当前目录将.h和.cpp文件提取出来做成tags文件:
find . -name "*.[chCH]" -print | etags -
或
find -name "*.cpp" -exec etags -a {} ;
5).将创建好的tag表通知emacs:
M-x visit-tags-table
6).让emacs自动读取tag文件内容:
在~/.emacs文件中类似如下内容:
(setq tags-file-name "~/project/src/TAGS")
好了,基本上大体的用法就是这样的了。虽然用起来不是很方便,而且没有类似于代码浏览器那样的视图,但是倒可以满足最基本的需求,不是吗?
(--完--)