注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

笨笨猫

 
 
 

日志

 
 

cscope for emacs  

2011-09-07 10:48:06|  分类: MeeGo |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
相对于简单的etags,cscope具有更强大的源码阅读功能。不同于etags,cscope 完全是一个独立的程序。用于帮助开发人员 浏览源代码。它最初是由 Bell 实验室开发,并且多年 以来一直是 AT&T Unix 商业发行版的一部分。据说,它已经被用于管理超过两千万行代 码的工程。在2000年4月, cscope 在 BSD软件许可证下开放了源代码。

现 在的cscope 发行包里面都有个 xcscope.el, 能够很好地和(X)Emacs进行集成,从而不用退出Emacs或切换环境,就能完成源码阅读、编辑、编译、调试 和运行的整个开发流程,给开发人员带来极大的方便。xcscope.el的使用很简单,常用的功能都能在菜单栏找到(然后再记住相应的快捷 键)
1)xcscope.el:该文件位于源代 码包的 contrib/xcscope 目录下。
2)cscope-indexer:该目录下面还有一个名为 cscope-indexer 的脚本文件,利用该脚本可以方便地对分布在多个目录或子目录下的源码建立索引。

当前的很多Linux发行版(如Fedora)都自带cscope,只要选择安装就可以。当然也可到 cscope 的主页 上去下载最新的源代码包,编译安装。

和Emacs集成:为了在 Emacs 里面 使用cscope
1)首先必须把 xcscope.el 拷贝到 load-path变量所包含的目录里面。实际上这一步很多Linux发行版都会替你完成这一步。
2)其次,需要在配置文件 ~/.emacs 里面加上 (require 'xcscope) ;或者,如果希望在打开 c 或者 c++ 文件的时候才加载 xcsope ,可以写:
(add-hook 'c-mode-common-hook
'(lambda ()
(require 'xcscope)))

为源码建立索引:
如 果源代码全部处于同一个目录下面,现在就可以使用了。否则,如果源代码有 多层目录,或者其他地方还有附加的源代码,则需要 cscope-indexer 脚本。把 那个脚本拷贝到系统 PATH 里面去(如 /usr/bin/)。如果所有的源代码以及子目 录都是在同一个目录下面的,也可直接在emacs中执行 C-c s I(cscope-index-files) 就可以 生成 cscope 的数据库,接下来就可以使用了。
cscope 要根据文件列表(cscope.files)来创建数据库(cscope.out)以供以后的 查询使用,所以第一步是创建文件列表。cscope.files 的格式是每行一个文件(包 含与cscope.files 的相对路径)。

比较简单的源码,你可以手工创建 cscope.files ,例如用 find 命令:
find . -name '*.c' -type f > cscope.files

但推荐用cscope-indexer脚本,调用命令为:
cscope-indexer [-r]    //-r 表示递归检索子目录。

只要在源码的根目录下执行上述脚本,一切就搞定了。你还可以根据自己的需要修改 cscope-indexer。例如通过修改该脚步增加对其它类型文件的检索。

默认情况下, Emacs每次调用 cscope 时都会检查是否有文件被改动过。如果 有的话,就会自动重新编译 cscope 数据库 (cscope.out)。这个功能相当实用。
但是如果工程十分庞大,即使是判断文件更新与否也很费时,可以告诉 Emacs 别自 动更新 cscope.out:
(setq cscope-do-not-update-database t)

默认的快捷键都是绑定到 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 (list functions called
from a function).
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.

下面是在搜索到的结果之间切换用的快捷键:
C-c s b Display *cscope* buffer.
C-c s B Auto display *cscope* buffer toggle.
C-c s n Next symbol.
C-c s N Next file.
C-c s p Previous symbol.
C-c s P Previous file.
C-c s u Pop mark.

在emacs中还可将cscope和etags一起用,etags由于其功能简单,在某些情况下使用更方便快捷。

喜欢图形界面的用户,可以使用kscope。kscope实际上是KDE环境下cscope的一个前端,具有cscope全部的功能,而且能够进行源码编辑。
  评论这张
 
阅读(1943)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017