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

news2024/11/23 3:13:02

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源码分析

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebDAV之葫芦儿·派盘 + Enpass

Enpass 支持WebDAV方式连接葫芦儿派盘。 想找一款加密软件把原来本地存储的明文密码,经过加密后存储到自己的电脑上。同时要具备云同步功能,有些安全级别没那么高的内容,可以同步到各端,以供快速查看、编辑。那您选择Enpass准没错了,还可以同步备份到个人私有派盘,跨平…

【vue】插槽,Provided/inject和vue3生命周期

&#xff08;1&#xff09;第一部分&#xff0c;关于插槽 插槽的作用是再子组件模板里面预留出位置&#xff0c;可以插入父组件的东西例如 <template> 下面是插槽展示的内容和&#xff1a;<slot/> </template>//父组件调用子组件布局的时候 <content>…

电竞蓝牙耳机什么牌子好?2022游戏蓝牙耳机推荐

随着玩游戏的人越来越多&#xff0c;随之而来的是越来越多的电竞蓝牙耳机的出现。在游戏中能够精准获取人物周围的声音变化&#xff0c;音效的同步汇入&#xff0c;这是喜欢戴蓝牙耳机玩游戏的用户所追求的听声辨位。那么&#xff0c;在众多的电竞蓝牙耳机当中&#xff0c;什么…

【复习笔记】计算机组成原理复习重点——篇五

计算机组成原理复习重点笔记 第&#xff15;章 输入输出系统 5.1 概述 外部设备&#xff1a;包括输入/输出设备及通过输入/输出接口才能访问的外存储设备。接口&#xff1a;外设与主机之间数据传输时完成速度匹配、格式转换等工作的逻辑部件。输入设备&#xff1a;键盘鼠标输出…

制造业ERP管理系统如何帮助企业解决委外加工管理难题?

当制造企业自身的生产能力不足或者缺乏某种技术的话&#xff0c;就需要把某个工艺甚至整个产品交给外面的制造厂商去进行生产&#xff0c;这就会触发委外加工作业。 委外加工是制造企业管理流程中&#xff0c;非常常见的一个环节&#xff0c;可以有效地减少因公司产能不足&…

qcustomplot单游标在多个坐标系中切换

1. 多坐标系—单个游标—游标在多个坐标系切换 在某些场景下&#xff0c;需要动态的添加多个坐标系&#xff0c;而游标只能在一个坐标系中显示&#xff0c;这时就需要将游标从默认的坐标系切换到指定坐标系&#xff0c;实现很简单&#xff0c;就不贴图了。代码如下&#xff1a…

docker中的c++ ROS节点中使用Matplotlib-cpp

背景 有时debug算法问题&#xff0c;想把算法&#xff0c;代码的中间量快速可视化出来&#xff0c;目前采用rviz或者qt_ros可以实现&#xff0c;但都不是很方便&#xff0c;代码开发量较大&#xff0c;常常会想要是能在ros c中也能像Matlab一样直接plot绘图就好了&#xff0c;…

英飞凌-AURIX-TC3XX 片上总线通信架构

目录1、英飞凌-AURIX-TC3XX 片上总线通信架构1.1、SRI-系统资源互连结构1.1.1、SRI简介1.1.2、SRI 的特征&#xff1a;1.1.3、SRI 结构相比于前一代产品主要的区别&#xff1a;1.1.4、SRI Crossbar 点对点连接机制1.1.5、SRI主机和SRI从机的连接情况1.2、系统外设总线1.3、BBB-…

Windows Qt连接达梦数据库

下载达梦数据库 首先可以在达梦数据库的官网下载达梦数据库&#xff1a;https://www.dameng.com/list_103.html 如果你的QT程序是64位的&#xff0c;那么就下载win64 的达梦数据库&#xff0c;相应的32位的QT程序要下载win32的达梦数据库。否则&#xff0c;程序在连接数据库时…

【图像分割】各向异性热扩散方程SAR图像分割【含Matlab源码 1879期】

⛄一、各向异性热扩散方程简介&#xff08;具体理论见参考文献&#xff09; 1 前言 图像分割是 图像解译的一个关键步骥。 图像分割属于图像解译的早期处理 &#xff0c; 目的是为更高水平的后续处理提供输人。 因此图像分割的好坏对后续 解译性能有较大的影响。 相对于光学图…

3、metasploit渗透测试初识

一、Metasploitable2靶机安装 参考(1条消息) Metasploitable-linux-2.0.0靶机下载配置教程_draper-crypto的博客-CSDN博客_metasploitable2-linux用户密码&#xff1a;msfadmin/msfadmin二、模块介绍 exploits&#xff08;渗透攻击/漏洞利用模块&#xff09;渗透攻击模块&#…

SuperMap GIS 倾斜摄影数据优化 QA

一、为什么要优化 倾斜摄影数据自身存在文件碎、体量大等特点。未经优化的倾斜摄影在目前市面上主流的三维平台上加载均会出现加载慢&#xff0c;浏览效率低等问题。特别是在浏览器端受文件请求量、网络带宽、硬件性能等方面的影响&#xff0c;倾斜摄影的显示效果往往不尽人意…

元房地产经纪人 — 科幻系列包 #2 来袭!

OUTR Studios 刚刚发布了他们最新的 The Sandbox 元宇宙科幻包&#xff0c;里面装满了很多好东西&#xff01;新内容包括两个非玩家角色 (NPC)、两套可装备的太空服和两个独特的太空无人机。这个最新版本肯定会为已有的模块化科幻构建套件增添更多乐趣。无论你们是与朋友一起建…

大屏适配的两种方案

现在做大屏的需求越来越多,大屏的适配是个头疼的事情 一、基于rem的适配方案 rem是什么? rem是指相对于根元素的字体大小的单位,在日常开发过程中我们通常把根元素(html/body)的字体设置为10px,方便于我们计算(此时子元素的1rem就相当于10px)。 适用场景 不固定宽高…

A_A05_001 aithinker_serial_tool_安信可调试助手使用

目录 一、软件获取 二、软件基本功能介绍 1、接收区 2、串口通信参数配置区 3、串口打开关闭与其他设置区域 4、手动发送区域 5、多文本发送区 6、辅助区域 三、注意事项 一、软件获取 网盘链接 直戳跳转 二、软件基本功能介绍 1、接收区 接收区就是接收外部设备给串口…

理解vue2.x版本中productionTip=false设置无效的原因

首先&#xff0c;我们看到vue官网中关于productionTip的API使用&#xff1a; 但是&#xff0c;我在本地中使用却无效&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta htt…

写接口用例文档,测接口

定义数据工具 共用API文档 产品、设计、前端、后端、测试、运维、售前、售后 mock 自动生成code和data 前后端 编写接口文档 post json格式 查询需要token值 APIfox介绍 一、常用解决方案 使用 Swagger 管理 API 文档 使用 Postman 调试 API 使用 mockjs 等工具 Mock AP…

算法刷题打卡第46天:排序数组---堆排序

排序数组 难度&#xff1a;中等 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5]堆排序…

[附源码]Python计算机毕业设计高校图书馆网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

C++初阶 模板进阶

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍进阶模板的一些特性 C 模板进阶非类型模板参数注意点模板的特化概念函数模板特化类模板的特化全特化偏特化模板的编译分离什么是编…