最近在学习Linux驱动时,想要在Linux-2.6.29内核中找一个重要的数据结构file_operations,但内核的文件那么多,所以就使用了一个工具Ctags,下面来说一下什么是Ctags,用我自己话说就是vim下的一个方便阅读代码的工具,有了它可以很方便的找到一个函数或者宏等等的一些的定义的原型。对于在Linux下开发的人员来说还是很方便的。
Ubuntu 下Ctags的安装还是很简单的,
输入命令sudo apt-get install ctags 即可,而我遇到了一个在Ubuntu下安装软时经常遇到的一个问题
出现这个的原因可能是因为另一个程序正在运行从而导致资源锁不可用,而导致资源被锁的原因可能是因为上次运行安装或更新时没有正常完成,解决方法只需要运行下面两条命令就可以啦:
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/achives/lock
安装完Ctags后就需要生成索引文件
在源码目录下输入命令:ctags -R * "-R"表示递归创建,也就是包括源代码根目录(当前目录)下的所有子目录。“*”表示所有的文件。这条命令会在当前目录下生成一个tags文件,当用户在当前目录中运行vim时,会自动载入此tags文件。Tags文件中包括这些对象的列表:用#define定义的宏、枚举类型变量的值,函数的定义、原型和声明,名字空间(namespace)、类型定义(typedef)、变量(包括定义和声明)、类(class)、结构体,联合体和联合体中成员变量或函数。VIM 用这个tags文件定位上面这些做了标记的对象。结果如下:
然后配置Ctags
使用sudo vim /etc/vim/vimrc 编辑vim配置文档,在其中加入如下的命令:set tags=tags文件的路径;,例如我的tags文件路径为/home/xinyang/tags 所以我的可以这样加 set tags=/home/xinyang/tags; ,如果需要配置多个tags,只需要在后面添加就行了
下面就该使用Ctags
vim 中使用Ctags最方便的方法就是把光标移到变量名或者函数名上,然后按
下" Ctrl + ] ",这样就能直接调到这个变量或者函数的定义的源文件中,并把光标定义到这一行。用"Ctrl + T" 可以I退回原来的地方。即使我们使用了N次" Ctrl + ] "查找了N个变量,按N次"Ctrl + T"也能回到最初打开的文件,它会按原路返回的。
我写了个测试程序,有三个文件test.h test.c test1.c 其中test.h中放了函数的声明my_add(int ,int ) my_sub(int ,int), 文件test1.c 中放两个函数的实现,test.c 调用这个函数。然后进入test.c 中,把光标移到my_add(int a,int b )上,按下
" Ctrl + ] ",结果竟然没有找到函数的定义,这是为什么呢???
原因是这样的,这三个文件是后来加进去的,也就是说其中的tags索引中并没有这三个文件中的函数的一些索引信息。所以找不到,解决办法很简单,就是再次在终端输入命令 :ctags -R * ,这样新生成的tags文件中就可以找到新加的文件中的函数的信息,然后就顺利找到了
注意:运行VIM的时候,必须在“tags”文件所在的目录下运行,否则,运行VIM 的时候还要用“.set tags="tags 文件路径"。这样vim才能找到tags文件,完成后可以手工删掉tags文件
阅读(11150) | 评论(0) | 转发(0) |