Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15318452
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2008-02-26 14:13:35

摒弃不便的cscope,直接使用性能优良的ctags阅读源程序

文章来源:http://gliethttp.cublog.cn

让liunx下的vim和windows下的gvim协同工作成为最大可能hehehehehehehehehehehehehehehe...

cscope致命的是不能解析.s文件,所以好多arm启动代码中的文件不能进行方便查找,Makefile中的关键词cscope也不能进行解析,
最致命的是当对经过cscope的文件进行编辑之后,尤其是使用回车换行添加新内容之后,cscope的跳转就会出现错位,这怎么能用,
所以cscope剩下的唯一比ctags有优势的地方就在于cs find e和cs find t命令了,这2个命令和是否添加了新内容无关,可以实现正确查找和跳转,
但是实际上,在linux环境下的vim中使用ctags进行源代码跳转阅读过程中,如果出现了想查找一个非tag的text字符串时,可以使用
:!grep -r text *也很方便,在windows下可以使用“搜索-文件中字符串“的功能,这是在操作上的区别,感觉如果是纯阅读,
不会添加任何注释以及不进行.s文件的阅读的话,cscope是个极好的选择,但是这种情况凤毛麟角,所以通过比较在阅读源代码时
我的做法是:摒弃cscope,完全使用ctags.
以上是操作上的一些不同之处,不使用cscope的另一个原因来自于对于关联文件的产生方式上,
因为一方面公司里边我会用linux环境下的vim来阅读源码,在其他时间我会使用windows下的gvim软件来阅读源码,
<1>在linux下使用cscope的生成,对于arm的linux内核源码,因为arch目录不能全部使用,否则关键字会出现很多无用的重复,
所以需要使用
find /gliethttp -maxdepth 1 -name *.c -o -name *.C -o -name *.h -o -name *.H -o -name *.s -o -name *.S -name Makefile>>__tmp_gliethttp_cscope
和find /gliethttp/src -name *.c -o -name *.C -o -name *.h -o -name *.H -o -name *.s -o -name *.S -name Makefile>>__tmp_gliethttp_cscope
两个指令来分别达到对一个目录下的文件非递归添加和一个目录下的文件的递归添加的目的,然后使用cscope -b -i __tmp_gliethttp_cscope来建立cscope.out关联文件,当然如果目录下的所有文件都是有用的,没有arch目录之类的区分,那么在那个目录下直接使用cscope -Rb还是很方便的,不过这个ctags也有.
<2>在windows生成cscope:
dir/?显示帮助文件
dir /b 当前文件夹下的所有文件 (本目录下的所有文件,但是只显示名字,所以必须手工添加前边的内容,当然可以使用ultredit的多行插入功能提高效率)
dir /b /s递归显示子目录下的文件 (显示的是绝对路径,cscope能够直接使用)
然后同样执行win32的cscope程序
cscope -b -i __tmp_gliethttp_cscope来完成cscope的建立。
<3>在linux下生成tags
ctags -R . 表示递归
ctags -a /* 表示将当前目录下的所有文件追加到已有的tags中,这2个命令极大的方便了tags的生成
示例:gliethttp_tags.sh脚本内容
##---------------------------------------------------------
ctags -f ./blob_tavor_ctags -R \
/vobs/boot/gliethttp/src/preview-kit/blob/include/net \
/vobs/boot/gliethttp/src/preview-kit/blob/tools \
/vobs/boot/gliethttp/src/preview-kit/blob/utils \
/vobs/boot/gliethttp/src/preview-kit/blob/src/blob/xllp/os \
/vobs/boot/gliethttp/src/preview-kit/blob/src/blob/xllp/platform/tavor_evb2 \
/vobs/boot/gliethttp/src/preview-kit/blob/src/blob/xllp/processor \
/vobs/boot/gliethttp/src/preview-kit/blob/src/commands \
/vobs/boot/gliethttp/src/preview-kit/blob/src/lib

##---------------------------------------------------------
ctags -f ./blob_tavor_ctags -a \
/vobs/boot/gliethttp/src/preview-kit/blob/* \
/vobs/boot/gliethttp/src/preview-kit/blob/include/* \
/vobs/boot/gliethttp/src/preview-kit/blob/include/blob/* \
/vobs/boot/gliethttp/src/preview-kit/blob/include/blob/proc/Makefile \
/vobs/boot/gliethttp/src/preview-kit/blob/include/blob/proc/monahans.h \
/vobs/boot/gliethttp/src/preview-kit/blob/include/blob/arch/Makefile \
/vobs/boot/gliethttp/src/preview-kit/blob/include/blob/arch/tavor_evb2.h \
/vobs/boot/gliethttp/src/preview-kit/blob/src/* \
/vobs/boot/gliethttp/src/preview-kit/blob/src/blob/* \
/vobs/boot/gliethttp/src/preview-kit/blob/src/blob/xllp/* \
/vobs/boot/gliethttp/src/preview-kit/blob/src/blob/xllp/platform/*
##---------------------------------------------------------
<4>在windows下生成tags供gvim使用
示例:gliethttp_tags.bat脚本内容

ctags -f blob_tavor_ctags -R E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\net E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\tools E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\utils E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\os E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\platform\tavor_evb2 E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\processor E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\commands E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\lib
 
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\net
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\tools
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\utils
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\os
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\platform\tavor_evb2
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\processor
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\commands
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\lib
 
 
ctags -f blob_tavor_ctags -a E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\* E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\* E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\* E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\proc\Makefile E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\proc\monahans E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\arch\Makefile E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\arch\tavor_evb2 E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\* E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\* E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\* E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\platform\* 
 
echo @E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\*
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\*
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\*
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\proc\Makefile
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\proc\monahans
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\arch\Makefile
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\include\blob\arch\tavor_evb2
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\*
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\*
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\*
echo @@E:\gliethttp-sourcecode-TST\wtptp\preview-kit\blob\src\blob\xllp\platform\*


总之,无论从cscope.out和tags的生成方式方便性、通用性以及实际操作角度来看以及.s文件的解析来看,
摒弃cscope,直接使用ctags完成一切工作,当然ctags的text文本超找能力是弱了一些,如果愿意,你可以
生成cscope和ctags两个连接文件,使用
:cs add
blob_tavor_cscope
:set tags=
blob_tavor_ctags
或者直接修改linux下的.vimrc和windows下的_vimrc启动脚本文家,但是总觉得这样还不够费事的呢(gliethttp_20080226)!
阅读(3314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~