【redis源码系列】Mac平台下使用Clion调试Redis源码

您所在的位置:网站首页 编译redis源码 【redis源码系列】Mac平台下使用Clion调试Redis源码

【redis源码系列】Mac平台下使用Clion调试Redis源码

2023-06-04 12:31| 来源: 网络整理| 查看: 265

前言

最近开始阅读redis源码, 工欲善其事,必先利其器, 首先学习如果使用Clion调试Redis的源码

环境 MacOs 15 redis版本: 6.0.14 Clion 下载Redis源码

地址: github.com/redis/redis… 可以直接下载安装包解压即可

编辑CMakeList.txt 打开Clion, 选择: File => New CMake Project from Sources, 打开源码项目, 会自动生成根目录下的CMakeList.txt 文件 编辑一下 CMakeList.txt 内容, 没有创建即可: ./CMakeLists.txt ./src/modules/CMakeLists.txt ./deps/CMakeLists.txt ./deps/linenoise/CMakeLists.txt ./deps/lua/CMakeLists.txt 复制代码

其中个文件内容如下:

./CMakeLists.txt cmake_minimum_required(VERSION 3.0 FATAL_ERROR) project(redis VERSION 6.0) #set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../src) message(CMAKE_RUNTIME_OUTPUT_DIRECTORY is:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) #if (NOT CMAKE_BUILD_TYPE) message(STATUS "No build type defined; defaulting to 'Debug'") set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "The type of build. Possible values are: Debug, Release, RelWithDebInfo and MinSizeRel.") #endif() message(STATUS "Host is: ${CMAKE_HOST_SYSTEM}. Build target is: ${CMAKE_SYSTEM}") get_filename_component(REDIS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) message(STATUS "Project root directory is: ${REDIS_ROOT}") # Just for debugging when handling a new platform. if (false) message("C++ compiler supports these language features:") foreach (i ${CMAKE_CXX_COMPILE_FEATURES}) message(" ${i}") endforeach () endif () message(STATUS "Generating release.h...") execute_process( COMMAND sh -c ./mkreleasehdr.sh WORKING_DIRECTORY ${REDIS_ROOT}/src/ ) add_subdirectory(deps) add_subdirectory(src/modules) set(SRC_SERVER_TMP src/crcspeed.c src/crcspeed.h src/sha256.c src/sha256.h src/connection.c src/connection.h src/acl.c src/timeout.c src/tracking.c src/tls.c src/adlist.c src/ae.c src/anet.c /usr/local/include/event.h src/ae_kqueue.c src/dict.c src/sds.c src/zmalloc.c src/lzf_c.c src/lzf_d.c src/pqsort.c src/zipmap.c src/sha1.c src/ziplist.c src/release.c src/networking.c src/mt19937-64.c src/util.c src/object.c src/db.c src/replication.c src/rdb.c src/t_string.c src/t_list.c src/t_set.c src/t_zset.c src/evict.c src/defrag.c src/module.c src/quicklist.c src/expire.c src/childinfo.c src/redis-check-aof.c src/redis-check-rdb.c src/lazyfree.c src/geohash.c src/rax.c src/geohash_helper.c src/siphash.c src/geo.c src/t_hash.c src/config.c src/aof.c src/pubsub.c src/multi.c src/debug.c src/sort.c src/intset.c src/syncio.c src/cluster.c src/crc16.c src/endianconv.c src/slowlog.c src/scripting.c src/bio.c src/rio.c src/rand.c src/memtest.c src/crc64.c src/bitops.c src/sentinel.c src/notify.c src/setproctitle.c src/blocked.c src/hyperloglog.c src/latency.c src/sparkline.c src/t_stream.c src/lolwut.c src/lolwut.h src/lolwut5.c src/lolwut6.c src/listpack.c src/localtime.c src/gopher.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/ae.c src/crc64.c src/crc16.c src/dict.c src/siphash.c ) if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # better not to work with jemalloc endif() set(EXECUTABLE_OUTPUT_PATH src) add_executable(redis-server ${SRC_SERVER}) add_executable(redis-cli ${SRC_CLI}) set_property(TARGET redis-server PROPERTY C_STANDARD 99) set_property(TARGET redis-server PROPERTY CXX_STANDARD 11) set_property(TARGET redis-server PROPERTY CXX_STANDARD_REQUIRED ON) set_property(TARGET redis-cli PROPERTY C_STANDARD 99) set_property(TARGET redis-cli PROPERTY CXX_STANDARD 11) set_property(TARGET redis-cli PROPERTY CXX_STANDARD_REQUIRED ON) target_include_directories(redis-server PRIVATE ${REDIS_ROOT}/deps/hiredis PRIVATE ${REDIS_ROOT}/deps/linenoise PRIVATE ${REDIS_ROOT}/deps/lua/src ) target_include_directories(redis-cli PRIVATE ${REDIS_ROOT}/deps/hiredis PRIVATE ${REDIS_ROOT}/deps/linenoise PRIVATE ${REDIS_ROOT}/deps/lua/src ) target_link_libraries(redis-server PRIVATE pthread PRIVATE m PRIVATE lua PRIVATE linenoise PRIVATE hiredis ) target_link_libraries(redis-cli PRIVATE pthread PRIVATE m PRIVATE linenoise PRIVATE hiredis ) link_directories(deps/hiredis/ deps/linenoise/ diredeps/lua/src) install(TARGETS redis-server RUNTIME DESTINATION bin ) #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -c") 复制代码 /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") 复制代码 ./deps/CMakeLists.txt add_subdirectory(hiredis) add_subdirectory(linenoise) add_subdirectory(lua) 复制代码 ./deps/linenoise/CMakeLists.txt add_library(linenoise linenoise.c) 复制代码 ./deps/lua/CMakeLists.txt set(LUA_SRC src/lauxlib.c src/liolib.c src/lopcodes.c src/lstate.c src/lobject.c src/print.c src/lmathlib.c src/loadlib.c src/lvm.c src/lfunc.c src/lstrlib.c src/lua.c src/linit.c src/lstring.c src/lundump.c src/luac.c src/ltable.c src/ldump.c src/loslib.c src/lgc.c src/lzio.c src/ldblib.c src/strbuf.c src/lmem.c src/lcode.c src/ltablib.c src/lua_struct.c src/lapi.c src/lbaselib.c src/lua_cmsgpack.c src/ldebug.c src/lparser.c src/lua_cjson.c src/fpconv.c src/lua_bit.c src/llex.c src/ltm.c src/ldo.c ) add_library(lua STATIC ${LUA_SRC}) 复制代码 编辑 ./src/ae_kqueue.c, 增加三个头文件,其中 unistd.h 是为了解决在本机上编译是有一个 c99 无 close 函数的报错 #include "ae.h" #include "zmalloc.h" #include // for close 复制代码 Debug

此时应该有Debug选项了, 如果没有, 可以重新Relaod CMakelist.txt

图片名称 图片名称

参考 github.com/LHRchina/re…



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3