内核源码阅读vim+cscope+ctags+taglist
杜斌博客:http://blog.db89.org/kernel-source-read-vim-cscope-ctags-taglist/
武特博客:http://edsionte.com/techblog/archives/1689
在linux下我们常用的就是vim+cscope+ctags+taglist组合,下来一一介绍。
1. vim
这个只要有linux系统就OK了。但是ubuntu系统安装后默认的是vi,所以还得安装一下vim:
1
|
sudo apt-getinstall vim
|
顺便可以配置一下vim这样的话,代码会高亮的显示出来,方便阅读源码。
vim配置详见:http://blog.db89.org/my-vim-configuration-file/
2. cscope
cscope是一个源码阅读工具,现在大多数linux系统源里都有这个软件,可以直接用yum或者apt来安装,或者下载源码来进行安装。
使用apt系统的使用一下命令:
1
|
sudo apt-getinstall cscope
|
使用yum的系统使用以下命令:
1
|
yum install cscope
|
用源码安装使用参看一下命令:
附:源码编译教程:http://blog.db89.org/under-linux-compile-the-basic-steps-of-the-software-source-code/
附:cscope源码下载地址:http://cscope.sourceforge.net/
附:cscope常用命令:http://blog.db89.org/the-cscope-commonly-command/
1
2
3
4
5
|
./configure--prefix=/usr
sudo make
sudo makeinstall
|
安装好了就是配置,在kernel.org下载需要的源码,解压后,在该目录下执行:
1
|
cscope-Rbkq
|
其中:
1
2
3
4
5
6
7
|
R表示把所有子目录里的文件也建立索引
b表示cscope不启动自带的用户界面,而仅仅建立符号数据库
q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
k在生成索引文件时,不搜索/usr/include目录
|
3. ctags
ctags是一个生成链接的一款软件,这个的安装和cscope是一样的过程。
1
|
sudo apt-getinstall ctags
|
同样的配置,在源码目录下执行:
1
|
ctags-R
|
4. taglist
taglist是一款vim的插件,它能够将一个文件中的变量,宏,函数单独的提出来,再加上分屏功能,作用就类似于vc下那个编辑器。
附:taglist下载地址:http://www.vim.org/scripts/script.php?script_id=273
taglist插件有两个:taglist.vim和taglist.txt,
将taglist.vim置于/usr/share/vim/vim72/plugin/taglist.vim下,
将taglist.txt置于/usr/share/vim/vim72/doc/taglist.vim下。
这样taglist就安装OK了。
taglist窗口快捷键:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o 在一个新打开的窗口中显示光标下tag
<Space> 显示光标下tag的原型定义
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
<F1> 显示帮助
|
最后在vim配置文件vimrc中添加:
1
|
map<F8>:Tlist<CR>
|
到此,该工具链就安装完毕了,下面是简单的使用。
在源码目录下输入vim,然后在命令模式下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
cs finds----查找C语言符号,即查找函数名、宏、枚举值等出现的地方
cs findg----查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
cs findd----查找本函数调用的函数
cs findc----查找调用本函数的函数
cs findt----查找指定的字符串
cs finde----查找egrep模式,相当于egrep功能,但查找速度快多了
cs findf----查找并打开文件,类似vim的find功能
cs findi----查找包含本文件的文件
|
在后面跟需要查找的就OK了,这套工具开始用着可能会有点不习惯,但是,一段时间后,会让你感到非常爽的。
如果有什么问题,欢迎大家一起讨论!
内核源码阅读vim+cscope+ctags+taglist的更多相关文章
- ubuntu下linux内核源码阅读工具和调试方法总结
http://blog.chinaunix.net/uid-20940095-id-66148.html 一 linux内核源码阅读工具 windows下当然首选source insight, 但是l ...
- Linux内核源码阅读记录一之分析存储在不同段中的函数调用过程
在写驱动的过程中,对于入口函数与出口函数我们会用一句话来修饰他们:module_init与module_exit,那会什么经过修饰后,内核就能狗调用我们编写的入口函数与出口函数呢?下面就来分析内核调用 ...
- linux内核源码阅读之facebook硬盘加速利器flashcache
从来没有写过源码阅读,这种感觉越来越强烈,虽然劣于文笔,但还是下定决心认真写一回. 源代码下载请参见上一篇flashcache之我见 http://blog.csdn.net/liumangxiong ...
- linux内核源码阅读之facebook硬盘加速flashcache之八
前面我们的分析中重点关注正常的数据流程,这一小节关注如果有异常,那么流程是怎么走完的呢? 1)创建新任务时kcached_job申请不到 2)读写命中时cache块为忙 3)系统关机时处理,系统开机时 ...
- linux内核源码阅读之facebook硬盘加速flashcache之三
上一节讲到在刷缓存的时候会调用new_kcahed_job创建kcached_job,由此我们也可以看到cache数据块与磁盘数据的对应关系.上一篇:http://blog.csdn.net/lium ...
- linux内核源码阅读之facebook硬盘加速flashcache之四
这一小节介绍一下flashcache读写入口和读写的基础实现. 首先,不管是模块还是程序,必须先找到入口,用户态代码会经常去先看main函数,内核看module_init,同样看IO流时候也要找到入口 ...
- linux内核源码阅读之facebook硬盘加速flashcache之二
flashcache数据结构都在flashcache.h文件中,但在看数据结构之前,需要先过一遍flashcache是什么,要完成哪些功能?如果是自己设计这样一个系统的话,大概要怎么设计. 前面讲过, ...
- linux内核源码阅读之facebook硬盘加速flashcache之六
其实到目前为止,如果对读流程已经能轻松地看懂了,那么写流程不需要太多脑细胞.我觉得再写下去没有太大的必要了,后面想想为了保持flashcache完整性,还是写出来吧.接着到写流程: 1530stati ...
- linux内核源码阅读之facebook硬盘加速flashcache之五
正常流程到flashcache_map的1623行或1625行,按顺序先看读流程: 1221static void 1222flashcache_read(struct cache_c *dmc, s ...
随机推荐
- 使用Tornado实现Ajax请求
Ajax,指的是网页异步刷新,一般的实现均为js代码向server发POST请求,然后将收到的结果返回在页面上. 这里我编写一个简单的页面,ajax.html <html> <h ...
- Cocos2d-x 3.0中 物理碰撞检測中onContactBegin回调函数不响应问题
好吧,事实上这篇也是暂时冒出来的,近期朋友要做个物理游戏,曾经做物理还是用box2d,呃.确实要花些功夫才干搞懂当中的精髓,可是听讲这套引擎又一次封装了一次.要easy非常多,所以就简单尝试了一下,感 ...
- java之this关键字
this使用范围 1.在类的方法定义中使用的this关键字代表调用该方法对象的引用. 2.当必须指出当前使用方法的对象是谁时,要使用关键字this. 3.有时使用this可以处理方法中成员变量和参数重 ...
- Refactoring之——代码的坏味道(四)过长参数列
1.1.4 Long Parameter List(过长参数列) 特征:一个方法有超过三四个的参数. 问题原因: 过长参数列可能是将多个算法并到一个函数中时发生的.函数中的入参可以用来控制最终选用哪个 ...
- Java 连接使用 Redis
1. 开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. 首先你需要下载驱动包,下载 jedis.j ...
- 正则化--L1正则化(稀疏性正则化)
稀疏矢量通常包含许多维度.创建特征组合会导致包含更多维度.由于使用此类高维度特征矢量,因此模型可能会非常庞大,并且需要大量的 RAM. 在高维度稀疏矢量中,最好尽可能使权重正好降至 0.正好为 0 的 ...
- Pushlet后台推送
1.Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模型:客户端发送请求,订阅感兴趣的事件:服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的 ...
- face++实现人脸识别
因为项目是在多年前完毕,face++的sdk可能有调整,所以部分功能可能不再适用(2017.3) 近期做了一个使用face++实现人脸识别的功能.当初看着官方文档一点头绪都没有.看了好久才弄明确.所以 ...
- nginx缓存设置
http://linux008.blog.51cto.com/2837805/547236 目的:缓存nginx服务器的静态文件.如css,js,htm,html,jpg,gif,png,flv,sw ...
- WebApi异常处理解决方案
一.使用异常筛选器捕获所有异常 首先在App_Start里面新建一个类WebApiExceptionFilterAttribute.cs,继承ExceptionFilterAttribute,重写On ...