暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CLion调试Redis6源码

天凉好个秋 好个秋 2019-12-26
759

前言

之前写过一篇文章(CLion调试Redis5源码)详细的介绍了如何在CLion中编译调试Redis5的源码。

前几天Redis发布了Redis6-rc1版本。在这个版本中增加了不少新的内容比如新的模块API、ACLS、SSL、RESP3等等。

研究这些新功能的最好的方式是debug对应的源码,本文更新介绍如何在CLion中编译Redis6的源码。

Redis6的下载地址为Redis6源码。

过程

在CLion中编译Redis6的源码跟编译Redis5的除了CMakeLists.txt之外基本没什么区别。

添加CMakeLists.txt

  1. hiredis
    根目录下面添加CMakeLists.txt
    文件,内容如下:

    add_library(hiredis STATIC
    hiredis.c
    net.c
    dict.c
    sds.c
    async.c
    read.c
    sockcompat.c
    )

    相对于Redis5增加了sockcompat.c
    文件。

  2. linenoise
    根目录下面添加CMakeLists.txt
    文件,内容如下:

    add_library(linenoise linenoise.c)

    跟Redis5保持不变。

  3. lua
    根目录下面添加CMakeLists.txt
    文件,内容如下:

    set(LUA_SRC
    src/lapi.c src/lcode.c src/ldebug.c src/ldo.c src/ldump.c src/lfunc.c
    src/lgc.c src/llex.c src/lmem.c
    src/lobject.c src/lopcodes.c src/lparser.c src/lstate.c src/lstring.c
    src/ltable.c src/ltm.c
    src/lundump.c src/lvm.c src/lzio.c src/strbuf.c src/fpconv.c
    src/lauxlib.c src/lbaselib.c src/ldblib.c src/liolib.c src/lmathlib.c
    src/loslib.c src/ltablib.c
    src/lstrlib.c src/loadlib.c src/linit.c src/lua_cjson.c
    src/lua_struct.c
    src/lua_cmsgpack.c
    src/lua_bit.c
    )

    add_library(lua STATIC ${LUA_SRC})

    跟Redis5保持不变。

  4. deps
    根目录下面添加CMakeLists.txt
    文件,内容如下:

    add_subdirectory(hiredis)
    add_subdirectory(linenoise)
    add_subdirectory(lua)

    跟Redis5保持不变。

  5. 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")

    跟Redis5保持不变。

  6. redis
    根目录中

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_TMP
src/acl.c
src/adlist.c
src/ae.c
src/ae_kqueue.c
src/anet.c
src/aof.c
src/bio.c
src/bitops.c
src/blocked.c
src/childinfo.c
src/cluster.c
src/config.c
src/connection.c
src/crc16.c
src/crc64.c
src/db.c
src/debug.c
src/defrag.c
src/dict.c
src/endianconv.c
src/evict.c
src/expire.c
src/geo.c
src/geohash.c
src/geohash_helper.c
src/gopher.c
src/hyperloglog.c
src/intset.c
src/latency.c
src/lazyfree.c
src/listpack.c
src/localtime.c
src/lolwut.c
src/lolwut5.c
src/lolwut6.c
src/lzf_c.c
src/lzf_d.c
src/memtest.c
src/module.c
src/multi.c
src/networking.c
src/notify.c
src/object.c
src/pqsort.c
src/pubsub.c
src/quicklist.c
src/rand.c
src/rax.c
src/rdb.c
src/redis-check-aof.c
src/redis-check-rdb.c
src/release.c
src/replication.c
src/rio.c
src/scripting.c
src/sds.c
src/sentinel.c
src/setproctitle.c
src/sha1.c
src/sha256.c
src/siphash.c
src/slowlog.c
src/sort.c
src/sparkline.c
src/syncio.c
src/t_hash.c
src/t_list.c
src/t_set.c
src/t_stream.c
src/t_string.c
src/t_zset.c
src/tls.c
src/tracking.c
src/util.c
src/ziplist.c
src/zipmap.c
src/zmalloc.c
)
set(SRC_SERVER src/server.c ${SRC_SERVER_TMP})
set(SRC_CLI
src/anet.c
src/sds.c
src/adlist.c
src/redis-cli.c
src/zmalloc.c
src/release.c
src/anet.c
src/ae.c
src/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-server
PRIVATE ${REDIS_ROOT}/deps/linenoise
PRIVATE ${REDIS_ROOT}/deps/hiredis
PRIVATE ${REDIS_ROOT}/deps/lua/src)
target_link_libraries(redis-server
PRIVATE pthread
PRIVATE m
PRIVATE lua
PRIVATE linenoise
PRIVATE hiredis)


add_executable(redis-cli ${SRC_CLI})
target_include_directories(redis-cli
PRIVATE ${REDIS_ROOT}/deps/linenoise
PRIVATE ${REDIS_ROOT}/deps/hiredis
PRIVATE ${REDIS_ROOT}/deps/lua/src)

target_link_libraries(redis-cli
PRIVATE pthread
PRIVATE m
PRIVATE linenoise
PRIVATE hiredis
)

跟Redis5相比主要增加了

src/acl.c
src/connection.c
src/gopher.c
src/lolwut6.c
src/sha256.c
src/tls.c
src/tracking.c

这几个文件。

解决报错

同编译Redis5。

文章转载自天凉好个秋 好个秋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论