免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2939 | 回复: 4

[转贴]用tags/cscope看内核源代码-HOWTO [复制链接]

论坛徽章:
0
发表于 2006-03-18 17:50 |显示全部楼层
作者:wheelz
来自:
http://www.linuxforum.net/forum/ ... K&Number=573982


看大家讨论得热烈,我也写点。呵呵

其实内核原代码的Makefile就包含了make tags/TAGS的选项,
但是生成的tags太大,因为包含了drivers等不常用的目录。

因此参照内核的Makefile文件,写了一个Makefile,
用来生成ctags/cscope/etags。

这样,可以根据自己的需要,删除和添加目录。

我以前没有用过tags/cscope,不知道有没有更好的方法。欢迎指教。
也请大家补充tags/cscope的常用的和好用的命令,技巧。

一、用法

找一个空目录,把附件Makefile拷贝进去。
然后在该目录中选择性地运行如下make命令:

注:SRCDIR用来指定内核源代码目录,如果没有指定,
则缺省为/usr/src/linux/,如

$ make

将处理/usr/src/linux下的源文件,在当前目录生成ctags, cscope


1) 只创建ctags

$ make SRCDIR=/usr/src/linux-2.6.12/ tags

2) 只创建cscope

$ make SRCDIR=/usr/src/linux-2.6.12/ cscope

3) 创建ctags和cscope

$ make SRCDIR=/usr/src/linux-2.6.12/

4) 只创建etags

$ make SRCDIR=/usr/src/linux-2.6.12/ TAGS


二、处理时包括的内核源文件:

1) 不包括drivers,sound目录
2) 不包括无关的体系结构目录
3) fs目录只包括顶层目录和ext2,proc目录

对2.6.12.1内核,这样生成的tags大约12M,cscopes大约19M

三、最简单的ctags命令

----------------------
1) 进入

进入vim后,用

:tag func_name

跳到函数func_name

----------------------
2) 看函数(identifier)

想进入光标所在的函数,用

CTRL + ]

----------------------
3) 回退

回退用

CTRL + T

----------------------


我现在只会用这几个命令,请大家说说其他常用的命令。

[ 本帖最后由 leviathan.alan 于 2006-3-18 17:51 编辑 ]

Makefile.zip

972 Bytes, 下载次数: 80

论坛徽章:
0
发表于 2006-03-18 17:51 |显示全部楼层
查找标识符

:tag write_<TAB>

找到以write_开头的标识符,如果有多个,继续按<TAB>,直到找到想要的。


如果想跳到包含block的标识符

:tag /block

然后用<TAB>来选择。

这里'/'就是告诉vim'block'是一个pattern。

如果想在以write_开头的标识符中选择一下,

:tselect /^write_

这里,'^'表示开头,同理,'$'表示末尾。

论坛徽章:
0
发表于 2006-03-18 17:52 |显示全部楼层
多个同名的标识符

如果某个函数有多个定义,':tag'命令会跳到第一个,如果当前文件有,则优先用这个。
然后可以跳到下一个同名的
:tnext

跳到第一个
:tfirst

跳到前count个
:[count]tprevious

跳到后count个
:[count]tnext

跳到最后一个
:tlast


你也可以在所有tagname中选择:
:tselect tagname

论坛徽章:
0
发表于 2006-03-18 18:02 |显示全部楼层

  1. if has("cscope")
  2.                 set csprg=/usr/local/bin/cscope
  3.                 set csto=0
  4.                 set cst
  5.                 set nocsverb
  6.                 " add any database in current directory
  7.                 if filereadable("cscope.out")
  8.                     cs add cscope.out
  9.                 " else add database pointed to by environment
  10.                 elseif $CSCOPE_DB != ""
  11.                     cs add $CSCOPE_DB
  12.                 endif
  13. map <F2> :cstag <C-R>=expand("<cword>")<CR><CR>
  14. map g<Ctrl-]> :cs find g <C-R>=expand("<cword>")<CR><CR>
  15. map <F3> :cs find 0 <C-R>=expand("<cword>")<CR><CR>
  16. map <F4> :cs find f <C-R>=expand("<cword>")<CR><CR>
  17.                 set csverb
  18. endif
复制代码

从帮助上看到的,自己稍微改了一点。

论坛徽章:
0
发表于 2006-03-20 09:32 |显示全部楼层
学到不少东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP