工欲善其事,必先利其器
源码结构
我们需要下载 memcached 源码(此文时版本为 1.5.6),首选当然是 https://github.com/memcached/memcached.git
核心文件结构如下:
- memcached.h / memcached.c主函数以及核心控制逻辑
- thread.c线程控制
- stats.h / stats.c数据统计管理器
- assoc.h / assoc.chashtable 操作
- items.h / items.citem 管理
- slabs.h / slabs.c内存池控制管理
- util.h / util.c工具类
- docs/{protocol,storage,threads}.txt协议、存储、线程池 文档
编译调试
Memcached 基于 autotools 进行代码编译管理的,相关知识可以查看 autotools 自动构建工程
为了调试方便,切记不要 make install
工具推荐 ctags、cgdb
ctags 堪称 vim 环境的神器
- yum install ctags使用 yum 或者 二进制包 安装
- ctags -R .-R 表示 recursive,递归,为当前目录及其子目录中的 c 文件生成标签文件。最后一个.表示在当前目录
- ctrl+]找到光标所在位置的标签定义的地方
- ctrl+t回到跳转之前的标签处
cgdb 基于 gdb 开发的调试神器,较 gdb 更加友好便捷
| 
 | 
 | 

- cgdb 特有的调试功能- start开始调试后 代码区域光标会跟随代码执行路径,显示界面比较友好
- ESC键切换至代码模式,支持 vim 的 j k h l 等功能在代码区查看代码
- 空格键代码模式下点击 空格键,在当前光标行 添加 break,再次点击 空格键 删除
- + -代码模式下点击 + - 键,分别可以 放大、缩小 代码区域范围
- i进入调试模式
 
- 调试模式下功能跟 gdb 一致,常用如下(gdb的技巧功能特别强大,希望可以自行找资料进行学习):- set args和- show args设置以及查看 参数
- start开始
- n一步一步执行
- c继续执行,直到 下一个断点 或者 退出
- info threads查看线程数据
- info b查看断点数据
- b thread.c:737和- b memcached_thread_init等,分别代表- 在 thread.c 的 737行设置断点、- 在 memcached_thread_init 方法处设置断点,断点设置方法比较多,这里暂时介绍两种
- p settings打印 settings 变量值
- watch settings监控 settings 变量值的变化
 
阅读方式
阅读 Memcached 源码需要有一定的 UNIX网络编程基础,另外由于该缓存系统主要是基于 Libevent库进行开发的,可以先去了解相关知识。
对于源码阅读,没有必要第一遍就完全理解所有细节,跟着我们的节奏渐进式了解每部分的实现机制,自己实际动手调试细节,方能达到目的。
本文作者: wettper
本文链接: http://www.web-lovers.com/memcached-source-prepare-env.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
 
		 
                      