工欲善其事,必先利其器
源码结构
我们需要下载 memcached 源码(此文时版本为 1.5.6),首选当然是 https://github.com/memcached/memcached.git
核心文件结构如下:
memcached.h / memcached.c
主函数以及核心控制逻辑thread.c
线程控制stats.h / stats.c
数据统计管理器assoc.h / assoc.c
hashtable 操作items.h / items.c
item 管理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 许可协议。转载请注明出处!