本文演示的是Mac使用CLion搭建Redis5.0源码的调试环境过程。Redis对各操作系统的底层接口实现了封装。所以在各操作系统上的调试搭建环境过程基本上是大同小异。
过程
下载Redis5.0源代码
git clone https://github.com/antirez/redis
使用CLion打开Redis项目
CLion使用CMake作为其编译系统,利用CMake的配置文件CMakeLists.txt可以很方便的创建编译器本身的代码环境。所以,用CLion打开下载的Redis源码目录后,需要添加相应的CMakeLists.txt文件。

添加CMakeLists.txt

在deps/hiredis根目录下面添加CMakeLists.txt文件
add_library(hiredis STATIChiredis.cnet.cdict.csds.casync.cread.c)
在deps/linenoise根目录下面添加CMakeLists.txt文件
add_library(linenoise linenoise.c)
在deps/lua根目录下面添加CMakeLists.txt文件
set(LUA_SRCsrc/lapi.c src/lcode.c src/ldebug.c src/ldo.c src/ldump.c src/lfunc.csrc/lgc.c src/llex.c src/lmem.csrc/lobject.c src/lopcodes.c src/lparser.c src/lstate.c src/lstring.csrc/ltable.c src/ltm.csrc/lundump.c src/lvm.c src/lzio.c src/strbuf.c src/fpconv.csrc/lauxlib.c src/lbaselib.c src/ldblib.c src/liolib.c src/lmathlib.csrc/loslib.c src/ltablib.csrc/lstrlib.c src/loadlib.c src/linit.c src/lua_cjson.csrc/lua_struct.csrc/lua_cmsgpack.csrc/lua_bit.c)add_library(lua STATIC ${LUA_SRC})
在deps根目录下面添加CMakeLists.txt文件
add_subdirectory(hiredis)add_subdirectory(linenoise)add_subdirectory(lua)
在src/modules根目录下面添加CMakeLists.txt文件
cmake_minimum_required(VERSION 3.9)set(CMAKE_BUILD_TYPE "Debug")add_library(helloworld SHARED helloworld.c)set_target_properties(helloworld PROPERTIES PREFIX "" SUFFIX ".so")add_library(hellotype SHARED hellotype.c)set_target_properties(hellotype PROPERTIES PREFIX "" SUFFIX ".so")add_library(helloblock SHARED helloblock.c)set_target_properties(helloblock PROPERTIES PREFIX "" SUFFIX ".so")add_library(testmodule SHARED testmodule.c)set_target_properties(testmodule PROPERTIES PREFIX "" SUFFIX ".so")
在Redis根目录下添加CMakeLists.txt文件
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)project(redis VERSION 4.0)set(CMAKE_BUILD_TYPE "Debug")get_filename_component(REDIS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE)add_subdirectory(deps)add_subdirectory(src/modules)set(SRC_SERVER_TMPsrc/adlist.csrc/ae.csrc/anet.csrc/dict.csrc/sds.csrc/zmalloc.csrc/lzf_c.csrc/lzf_d.csrc/pqsort.csrc/zipmap.csrc/sha1.csrc/ziplist.csrc/release.csrc/networking.csrc/util.csrc/object.csrc/db.csrc/replication.csrc/rdb.csrc/t_string.csrc/t_list.csrc/t_set.csrc/t_zset.csrc/evict.csrc/defrag.csrc/module.csrc/quicklist.csrc/expire.csrc/childinfo.csrc/redis-check-aof.csrc/redis-check-rdb.csrc/lazyfree.csrc/geohash.csrc/rax.csrc/geohash_helper.csrc/siphash.csrc/geo.csrc/t_hash.csrc/config.csrc/aof.csrc/pubsub.csrc/multi.csrc/debug.csrc/sort.csrc/intset.csrc/syncio.csrc/cluster.csrc/crc16.csrc/endianconv.csrc/slowlog.csrc/scripting.csrc/bio.csrc/rio.csrc/rand.csrc/memtest.csrc/crc64.csrc/bitops.csrc/sentinel.csrc/notify.csrc/setproctitle.csrc/blocked.csrc/hyperloglog.csrc/latency.csrc/sparkline.csrc/t_stream.csrc/lolwut.csrc/lolwut5.csrc/listpack.csrc/localtime.c)set(SRC_SERVER src/server.c ${SRC_SERVER_TMP})set(SRC_CLIsrc/anet.csrc/sds.csrc/adlist.csrc/redis-cli.csrc/zmalloc.csrc/release.csrc/anet.csrc/ae.csrc/crc64.c)set(EXECUTABLE_OUTPUT_PATH src)link_directories(deps/linenoise/ deps/lua/src deps/hiredis)add_executable(redis-server ${SRC_SERVER})target_include_directories(redis-serverPRIVATE ${REDIS_ROOT}/deps/linenoisePRIVATE ${REDIS_ROOT}/deps/hiredisPRIVATE ${REDIS_ROOT}/deps/lua/src)target_link_libraries(redis-serverPRIVATE pthreadPRIVATE dlPRIVATE mPRIVATE luaPRIVATE linenoisePRIVATE hiredis)add_executable(redis-cli ${SRC_CLI})target_include_directories(redis-cliPRIVATE ${REDIS_ROOT}/deps/linenoisePRIVATE ${REDIS_ROOT}/deps/hiredisPRIVATE ${REDIS_ROOT}/deps/lua/src)target_link_libraries(redis-cliPRIVATE pthreadPRIVATE mPRIVATE linenoisePRIVATE hiredis)
解决报错问题
在添加完CMakeLists.txt文件之后,CLion会自动进行编译源码,编译完成之后,代码就可以debug了。有的时候CLion不会进行编译,可以手动的进行编译操作。选中redis根目录下的CMakeLists.txt文件进行手动编译。或者让编译器自己导入进行编译。


在编译完成后会出现这样的一个目录

我们选择redis-server后,点击调试按钮开始进行调试操作。

此时会遇到以下几种错误,我们来逐一解决:
一、部分C文件找不到函数

这个时候只需要点击进入ae_kqueue.c文件中,添加下面两个头文件:
#include "ae.h"#include "zmalloc.h"
二、缺少依赖的.h文件

我们只需要进入src目录下,执行mkreleasehdr.sh脚本即可:
[@huzhibindeMacBook-Pro:src (redis-omg)]$ pwd/Users/hzb/redis_github/redis_tmp/src[@huzhibindeMacBook-Pro:src (redis-omg)]$ sh mkreleasehdr.sh[@huzhibindeMacBook-Pro:src (redis-omg)]$
三、CMakeList.txt导入c函数不完全

只需要找到红圈中方法对应函数所在的C文件,再添加到redis根目录下的CMakeList.txt的SRC_SERVER_TMP下后重新编译就行了。

在解决上面这些问题后,就可以看到熟悉的运行成功界面了。然后就开始愉快(kubi)的调试过程吧~

你的关注就是对我们最大的支持
长按屏幕识别图中二维码关注我们

文章实用,别忘了给我们点赞 




