linux实用技巧:你该使用ctags查找源码了

linux实用技巧:你该使用ctags查找源码了


1.ctags简介: “哦,这个多的文件,我该如何去查看XX函数的实现!”相信这是很多朋友的抱怨。太多的文件导致我们无法去定位一个函数的实现或者一个宏定义的位置。显然对于源码的阅读和个人的学习都是非常不利的。多么希望有一个软件能够输入命令就能够精确的定位函数的位置。是的,现在有这么一个工具:ctags,它需要和vim编辑器配合使用,让源码阅读可以更加轻松。 什么是ctags? ctags(Generate tag files for source code)是vim下方便代码阅读的工具。尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码。 ctags更新地址:http://ctags.sourceforge.net/,这个网站是ctags的官方网站,你可以在上面下载到关于ctags的最新内容。 ctags能够定位什么内容? 1)用#define定义的宏 2)枚举型变量的值 3)函数的定义、原型和声明 4)名字空间(namespace) 5)类型定义(typedefs) 6)变量(包括定义和声明) 7)类(class)、结构(struct)、枚举类型(enum)和联合(union) 8)类、结构和联合中成员变量或函数 2.配置自己的环境满足ctags: 安装ctags,如果是redhat,则直接使用yum命令安装:

在指定的源码位置生成tags文件,并且我们添加很多参数来完善ctags的功能(为了体现其功能的强大,我用它来生成linux源码的tags文件):

然后我们查看tags内容就可以发现,原来tags就是linux内核代码中各个元素的索引,这也就是ctags结合vim可以快速进行定位的原因了(查询就是通过这个文件内容来定位的):

tags路径必须写入vim的配置文件中,才能在vim里面正确跳转,所以我们要进行添加:

完成之后我们就可以进行查找了,这里我们以printf的为例(你很快就会见识到ctags的威力了),如果是有经验的程序员,我想你一定会很快的反应出printf函数在什么文件中,呵呵。还好有经验的人并不是很多。。。 ctags的使用方法有一下几种: 1.直接在命令行上操作:

2.在vim的模式下用“:ta ”命令:

3.在光标制定的位置下直接使用“ctrl+]”,就可以定位到函数的定义位置: 关于ctags的用法有很多,以下是我们列举的部分: "Ctrl-o"退回原来的地方; [{ 转到上一个位于第一列的"{"; }] 转到下一个位于第一列的"{"; { 转到上一个空行; } 转到下一个空行; gd 转到当前光标所指的局部变量的定义; * 转到当前光标所指的单词下一次出现的地方 ; # 转到当前光标所指的单词上一次出现的地方; 关于ctags更多的命令大家可以查看man手册,以后妈妈再也不用担心我读源代码了。。。^_^

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2014-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码生

Linux 权限代码解析

首先说明: 数字后面为9位由字母或-组成的 每三位对应前面的一个数字 例如:755 rwx 对应第一个7 r-x 对应第二个5 r-x 对应第三个5

23840
来自专栏黑泽君的专栏

c语言基础学习02_helloworld

============================================================================= 涉及...

18810
来自专栏用户2442861的专栏

JavaWeb工程中web.xml基本配置

        先说下我记得xml规则,必须有且只有一个根节点,大小写敏感,标签不嵌套,必须配对。

29410
来自专栏技巅

Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(1)

19230
来自专栏iOS开发笔记

iOS开发之单例模式你用对了吗

、 单例在iOS开发中可以说是很常见的一种设计模式,在你的项目中或许你已经用过很多次,大家可能都会想不就是单例吗,我闭着眼睛单手就能写。是的,单例可以说是所有设...

9640
来自专栏Java帮帮-微信公众号-技术文章全总结

01.线程状态/创建/启动

01.线程状态/创建/启动 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的。 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,...

40770
来自专栏数据结构与算法

22:紧急措施

22:紧急措施 总时间限制: 1000ms 内存限制: 65536kB描述 近日,一些热门网站遭受黑客入侵,这些网站的账号、密码及email的数据惨遭泄露。你...

39380
来自专栏FreeBuf

Node.js中的内存泄漏分析

内存泄漏(Memory Leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。如果内存泄漏的位置比较关键,那么随着处理的进行可能持有越来越多的无用...

56850
来自专栏友弟技术工作室

bash及其特性

13730
来自专栏任浩强的运维生涯

mongodb基础篇

一、  关于mongodb 两种非关系数据库 Redis:满足极高读写性能的Key-Value数据库       键值式储存,可以通过键快速查询到值。     ...

34880

扫码关注云+社区

领取腾讯云代金券