Linux下源码分析利器Ctags
2016-05-03 23:16
288 查看
最近有看一些代码量比较大的开源代码,在阅读的过程中感觉读大型的源码真的好难。我们先不说其逻辑方面的难度,而是你在读的过程中所遇到的大量的宏定义,类型定义,函数定义以及一些枚举变量等把我们搞的是晕头转向,因为我们得到其他文件里找到他们的原始定义,这真是最令人头疼的地方。此时你是否会想要是有一个程序能自动帮我们找到上述东西的原始定义那该多好。其实linux下就有这个工具ctags
方法2:
安装包下载地址http://ctags.sourceforge.net
压缩包下载好之后执行如下操作
(1)#define定义的宏
(2)枚举变量的值
(3)函数的实现
(4)类型定义
(5)变量定义和声明
(6)类,结构体等
我写了如下3个测试文件
test.h
test.cpp
main.cpp
接下来我们就要已main.cpp来为大家展示ctags的好用
要想使用ctags分析源码,那么我们就得先用如下命令来生成对该源码所有文件中的对象列表中的对象和其对应定义或实现所在文件的地点的索引
命令如下
需要强调的是此目录要在src目录下执行
执行此命令后我们ls结果如下
可以看出生成了新文件ctags,我们打开查看一下它里面的内容
从图中可以看出它采用某种方式对那些关键对象的定义或实现的位置做了记录
首先打开main.cpp文件
假设我们要查看VALUE_ZERO该宏的定义,只需要将当前终端的光标移动到该宏的位置处,如下图所示
然后ctrl+]就可以切到其原始定义的文件处了
此时我们如果想回到之前位置只需要ctrl+t就可以了
接着你又想查看printHello这个函数体是咋样写的,那么还是老方法,首先把光标放到该函数处,接着crtl+],执行结果如下
同样想回到之前文件处crtl+t
其它的只要是我们前文中对象列表里有的对象,都可以采用这种方法来查看其对应的原始定义或实现
1.Ctags的安装
方法1:sudo apt-get install ctags
方法2:
安装包下载地址http://ctags.sourceforge.net
压缩包下载好之后执行如下操作
./configure make sudo make install
2.ctags的对象列表
ctags的对象列表其实就是说ctags能帮我们寻找程序中的哪些对象的实现或是定义(1)#define定义的宏
(2)枚举变量的值
(3)函数的实现
(4)类型定义
(5)变量定义和声明
(6)类,结构体等
3.使用前的准备
首先我在我的ubuntu上创建一个src目录,之后我的所有操作都会是以在此目录下为前提了我写了如下3个测试文件
test.h
#pragma once #define VALUE_ZERO 1 enum VALUE { VALUE_ONE, VALUE_TWO, VALUE_THREE }; void printHello(void); typedef int INT; class Test { public: Test(int v); int get(void); private: int value; };
test.cpp
#include "test.h" #include <stdio.h> int value = 10; void printHello(void) { printf("hello\n"); } Test::Test(int v) :value(v) { ; } int Test::get(void) { return value; }
main.cpp
#include "test.h" #include <stdio.h> extern int value; int main(void) { printf("%d\t%d\t%d\n",VALUE_ZERO,VALUE::VALUE_ONE,VALUE_TWO); printHello(); INT n = 5; printf("%d\n",n); printf("%d\n",value); Test test(3); printf("%d\n",test.get()); }
接下来我们就要已main.cpp来为大家展示ctags的好用
要想使用ctags分析源码,那么我们就得先用如下命令来生成对该源码所有文件中的对象列表中的对象和其对应定义或实现所在文件的地点的索引
命令如下
ctags -R
需要强调的是此目录要在src目录下执行
执行此命令后我们ls结果如下
可以看出生成了新文件ctags,我们打开查看一下它里面的内容
从图中可以看出它采用某种方式对那些关键对象的定义或实现的位置做了记录
4.开始使用
在此之前有一点要补充的是ctags这个工具和我们的vim是配合使用的首先打开main.cpp文件
假设我们要查看VALUE_ZERO该宏的定义,只需要将当前终端的光标移动到该宏的位置处,如下图所示
然后ctrl+]就可以切到其原始定义的文件处了
此时我们如果想回到之前位置只需要ctrl+t就可以了
接着你又想查看printHello这个函数体是咋样写的,那么还是老方法,首先把光标放到该函数处,接着crtl+],执行结果如下
同样想回到之前文件处crtl+t
其它的只要是我们前文中对象列表里有的对象,都可以采用这种方法来查看其对应的原始定义或实现
相关文章推荐
- 开源代码编译过程及原理
- 愿这里真是开源代码的宝藏!
- 开源资源
- 高通平台Android开源代码下载
- android开发者应该深入学习的十个开源项目
- 开源代码网站推荐
- 什么值得买ios客户端
- QuadCurveMenu菜单值得拥有
- 懒人码库
- VS2012 Express编译log4cplus图文教程
- iOS项目添加CocoaPods
- 【电子签到】v1.0版本正式上线!免费下载!
- Android应用开发框架:Android Annotations
- 实战做项目如何选择开源许可协议(一)-了解协议
- 基于libuinet的IPv6调试
- 22个值得收藏的android开源代码-UI篇
- 开源代码、解决方案索引
- Smack文档一:Smack概述
- Smack文档二:Smack入门
- Smack文档三:Smack: 连接管理