linux下gcc编程12-window下clion编译调试redis7.0

redis介绍

Redis 通常被称为数据结构服务器。这意味着 Redis 通过一组命令提供对可变数据结构的访问,这些命令使用具有 TCP 套接字和简单协议的服务器-客户机模型发送。因此,不同的进程可以以共享的方式查询和修改相同的数据结构。

在 Redis 中实现的数据结构具有一些特殊属性:

  1. 注意将它们存储在磁盘上,即使它们总是被提供并修改到服务器内存中。这意味着 Redis 是快速的,但它也是非易失性的。
  2. 数据结构的实现强调了内存效率,因此与使用高级语言建模的相同数据结构相比,Redis 内部的数据结构可能会使用更少的内存
  3. 提供了一些在数据库中自然可以找到的特性,比如复制、可调的持久性级别、集群和高可用性。

另一个很好的例子是将 Redis 视为 memcached 的一个更复杂的版本,其中的操作不仅仅是 SET 和 GET,还包括处理复杂数据类型(如 List、 Set、有序数据结构等)的操作。

如果你想知道更多,这是一个选定的起点列表:

  • Redis 数据类型简介 https://redis.io/topics/data-types-intro
  • 直接在浏览器中尝试 Redis https://try.redis.io
  • Redis 命令的完整列表 https://redis.io/commands
  • 官方 Redis 文档中还有更多内容 https://redis.io/documentation

window下编译redis

window编译redis的目的主要是用于在clion下调试redis,方便代码阅读。
安装cygwin环境:参考:nginx编译教程中安装cygwin章节

下载redis7.0代码:

git clone -b 7.0 https://github.com/redis/redis.git

打开Cygwin64 Terminal,执行命令:make。

make
cd src && make all
make[1]: Entering directory '/cygdrive/d/code1/redis-7.0/src'
    CC Makefile.dep

编译过程中会报错

debug.c:1759:5: error: unknown type name ‘Dl_info’

查看src/debug.c有代码如下:

#include <dlfcn.h>

找到cygwin安装目录下的usr\include\dlfcn.h,有一段代码

#if __GNU_VISIBLE
typedef struct Dl_info Dl_info;

struct Dl_info
{
   char        dli_fname[PATH_MAX];  /* Filename of defining object */
   void       *dli_fbase;            /* Load address of that object */
   const char *dli_sname;            /* Name of nearest lower symbol */
   void       *dli_saddr;            /* Exact value of nearest symbol */
};

extern int dladdr (const void *addr, Dl_info *info);
#endif

明显是判断了__GNU_VISIBLE这个宏,可以copy一个dlfcn1.h
在#if __GNU_VISIBLE前加上一个#define __GNU_VISIBLE 1

#define __GNU_VISIBLE 1
#if __GNU_VISIBLE
typedef struct Dl_info Dl_info;

struct Dl_info
{
   char        dli_fname[PATH_MAX];  /* Filename of defining object */
   void       *dli_fbase;            /* Load address of that object */
   const char *dli_sname;            /* Name of nearest lower symbol */
   void       *dli_saddr;            /* Exact value of nearest symbol */
};

extern int dladdr (const void *addr, Dl_info *info);
#endif

修改redis源代码src/debug.c修改为:

#include <dlfcn1.h>

重新执行make,src下生成了redis-开头的exe文件
在这里插入图片描述
从cygwin目录/bin目录拷贝cygwin1.dll到redis的src源码目录,同时将redis源码根目录的redis.conf拷贝到src源码目录。
尝试双击redis-server.exe
在这里插入图片描述
开启redis-cli连接
在这里插入图片描述

clion调试redis

注意clion在2021年后的版本才支持makefile的程序调试,需要升级到版本>=clion2021
同时需要先用上面的命令编译出exe文件。
clion中确保插件Makefile是安装的
在这里插入图片描述
clion打开redis项目
设置下cygwin环境
在这里插入图片描述
指定make文件
在这里插入图片描述

創建 Custom Build Targets,这步的意思是构建和清除指定的命令
新建一个
在这里插入图片描述
toolchain选择cygwin
build 右侧…新建一个build
在这里插入图片描述
在新建一个clean
在这里插入图片描述
Run/Debug Configuration新增一个配置
指定Custom Build Targets和可执行文件
在这里插入图片描述
src/server.c 中的main方法打个断点,debug启动
在这里插入图片描述

src/Makefile文件%.o: %.c .make-prerequisites任务用于编译,如果需要加gcc参数可加载这里

redis源码分析

调试环境已经备好,后续有空在慢慢分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值