当前位置: 首页 > 工具软件 > Ctags > 使用案例 >

Ctags的安装与使用

孟承嗣
2023-12-01

前一段时间在学习移植uboot的时候,有些函数不需要编译,但是它却编译了,导致了make的失败。这时候,我们就需要去看看那些函数到底在哪里定义的。但是面对一个庞大的文件夹,里面有大量的代码,有大量的函数,谁能知道某个函数在哪里定义,如果一个一个文件的找,无异于大海捞针。然后通过老师知道了有Ctags这个工具,于是我就去网上学习了一下,轻松的解决了问题。前一段时间并没有去写这篇博客,一直推到现在,那我们就来说一下Ctags这个工具吧。

Ctags的功能

Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等。

Ctags的下载与安装

  1. 使用yum命令安装
    sudo yum install -y ctags

  2. 下载源码安装
    1)从http://ctags.sourceforge.net/下载源代码包后,解压缩生成源代码目录;
    2)然后进入源代码根目录执行./configure,生成Makefile文件;
    3)然后执行make;
    4)编译成功后执行make install。

Ctags的使用方法

ctags -R *

安装完ctags之后,我们一般第一个命令就是:

[PainEver@maple linux-3.0.1]$ ctags -R *     

注释:“-R”表示递归创建,包括当前目录下的所有目录;“*”表示所有文件。这条命令会在当前目录下产生一个“tags”文件。

[PainEver@maple linux-3.0.1]$ ls tags
tags

当我们vim tags进入这个文件会看到,这个文件就像是一个列表,包含了以下对象:

  1. 用#define定义的宏
  2. 枚举型变量的值
  3. 函数的定义、原型和声明
  4. 名字空间(namespace)
  5. 类型定义(typedefs)
  6. 变量(包括定义和声明)
  7. 类(class)、结构(struct)、枚举类型(enum)和联合(union)类、结构和联合中成员变量或函数

具体是怎写的,有兴趣的可以进tags这个文件中看看。

vim -t xxx

在生成一个ctgs文件之后,我们要想查找函数,变量,结构体什么的就可以执行下面这个命令:

[PainEver@maple linux-3.0.1]$ vim -t xxx /*把xxx换成你想要查找的对象*/

/*比如我们要查找i2c_driver这个结构体*/
[PainEver@maple linux-3.0.1]$ vim -t i2c_driver

然后就会出现下面这个界面:


  # pri kind tag               文件
  1 F   m    i2c_driver        include/drm/drm_encoder_slave.h
               struct:drm_i2c_encoder_driver typeref:struct:drm_i2c_encoder_driver::i2c_driver
               struct i2c_driver i2c_driver;
  2 F   s    i2c_driver        include/linux/i2c.h
  Type number and <Enter> (empty cancels): 

这个界面就是包含了i2c_driver出现过的所有地方。我们选择需要查看的编号,输入1或2按下enter键即可查看。

ctrl+]

还有一种情况,就是我们在看代码的时候,里面会出现各种各样的函数,变量,宏,结构体等等的调用,那我们如何查看被调用这些对象是在哪里定义的呢?我们把光标移动到想要查看的对象上,按”ctrl+]”,就可以直接跳转到这个对象定义的地方。

注意:运行vim的时候,必须在“tags”文件所在的目录下运行。否则,运行vim的时候还要用“:settags=”命令设定“tags”文件的路径,这样vim才能找到“tags”文件。

ctrl+t/左右键

ctrl+t“退回至上次查找的变量,如果用户使用了N次“Ctrl+]”查找了N个变量,我们也可以通过N次”ctrl+t“退回最初的位置。

其实有一种方法更方便,就是上下左右的左右键,比如我们查找了a、b、c、d这四个变量,那么在tags缓冲区内,就会有a、b、c、d这四个变量,假设我们现在在看d变量,我们想要去看之前查看的c变量时,就可以通过左键退回上一次查看的变量,然后如果我们想要再看d变量,就可以通过右键在跳转到d变量上。

一般来说我们能够用到的就这几个基础命令,想要深入了解,就 man ctags 具体看一下吧。

 类似资料: