项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
Redis 源码分析 —— 调试环境搭建
2020-12-05
·
芋道源码
·
转载
·
redis
·
本文共 482个字,预计阅读需要 2分钟。
> `转载`于【[芋道源码](http://svip.iocoder.cn/)】 ## 1. 依赖工具 ### 1.1 CLion 下载地址:
Jetbrains 团队提供的 C/C++ 开发工具。 和我们平时使用的 IntelliJ IDEA 差别不大。 ### 1.2 CMake CLion 使用 [CMake](https://cmake.org/) 编译工具,所以我们需要进行下安装。 直接使用 [brew](https://brew.sh/) 来进行安装: ``` brew install cmake ``` ### 2. 源码拉取 从官方仓库
Fork 出属于自己的仓库。 - 为什么要 Fork ?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。😈 - 本文使用的 Redis 版本为 `5.0.X` 。 - 使用 CLion 从 Fork 出来的仓库拉取代码。因为 Redis 项目比较大,从仓库中拉取代码的时间会比较长。 ## 3. 添加 CMakeLists.txt 文件 CLion 使用 CMake 作为编译工具,所以我们需要添加 CMakeLists.txt 文件。这里,我们需要新建 6 个 CMakeLists.txt 文件。分别如下: ``` $ find . -iname CMakelists.txt ./CMakeLists.txt ./deps/CMakeLists.txt ./deps/linenoise/CMakeLists.txt ./deps/hiredis/CMakeLists.txt ./deps/lua/CMakeLists.txt ./src/modules/CMakeLists.txt ``` - 注意,这 6 个 CMakeLists.txt 需要我们新建。艿艿这里是已经操作完成了。 6 个文件,具体的内容,胖友点击下方的链接,然后创建并复制到其中: - [./CMakeLists.txt](https://github.com/YunaiV/redis/blob/unstable/CMakeLists.txt) - [./deps/CMakeLists.txt](https://github.com/YunaiV/redis/blob/unstable/deps/CMakeLists.txt) - [./deps/linenoise/CMakeLists.txt](https://github.com/YunaiV/redis/blob/unstable/deps/linenoise/CMakeLists.txt) - [./deps/hiredis/CMakeLists.txt](https://github.com/YunaiV/redis/blob/unstable/deps/hiredis/CMakeLists.txt) - [./deps/lua/CMakeLists.txt](https://github.com/YunaiV/redis/blob/unstable/deps/lua/CMakeLists.txt) - [./src/modules/CMakeLists.txt](https://github.com/YunaiV/redis/blob/unstable/src/modules/CMakeLists.txt) 😈 想偷懒的胖友,其实可以直接克隆我的项目即可。 添加完成后,右键 `./CMakeLists.txt` 文件,选择 [Reload CMake Project] 操作,如下图:![Reload CMake Project](http://svip.iocoder.cn/images/Redis/2019_09_15/01.jpg) 重新加载完成后,我们就可以看到 Debug 增加了各种选项,如下图:![Debug](http://svip.iocoder.cn/images/Redis/2019_09_15/02.jpg) ## 4. Debug redis-server Debug 运行 redis-server 。此时,会报 aeEventLoop 相关的异常,如下图:![aeEventLoop 异常](http://svip.iocoder.cn/images/Redis/2019_09_15/03.jpg) - 打开 `ae_kqueue.c` 文件,添加两个头文件: ``` #include
#include
#include
#include "ae.h" // 新增 #include "zmalloc.h" // 新增 ``` Debug 运行 redis-server 。此时,会报 `release.h` 相关的异常,如下图:![release.h 异常](http://svip.iocoder.cn/images/Redis/2019_09_15/04.jpg) - 打开 `mkreleasehdr.sh` 脚本,然后进行执行。 Debug 运行 redis-server 。撒花,成功,如下图:![启动成功](http://svip.iocoder.cn/images/Redis/2019_09_15/05.jpg) 如果胖友想验证自己是不是真的可以调试,可以打开 `server.c` 文件,在 `#main(int argc, char **argv)` 方法中,添加断点,开始愉快的调试。如下图:![调试 main 方法](http://svip.iocoder.cn/images/Redis/2019_09_15/06.png) ## 彩蛋 嘿嘿,比想象中的顺利。如果胖友搭建调试的过程中,有碰到问题,可以在星球上给艿艿留言。艿艿自己在配置 `./CMakeLists.txt` 文件卡壳了,不同版本的 Redis 会有所不同。 理论来说,Redis 的源码解析,艿艿是不会更新,嘿嘿。市面上已经有一本 [《Redis设计与实现》](https://item.jd.com/11486101.html) 写的非常不错。如果对 Redis 源码感兴趣的胖友,可以购买本书来撸,艿艿自己也是买的这本书。 - 网站传送门:
可以体验下。 - 微信读书上,有该书。 本文参考文章: - [《CLion 调试 Redis5 源码》](http://beautyboss.me/2019/03/10/CLion调试Redis5源码/) - [《mac + CLion + redis5 本地调试/运行》](https://www.jianshu.com/p/904b44911ab9) - [《clion 调试 redis 源码》](https://sunznx.com/redis/redis-source-debug-with-clion.html)