使用CLion调试Redis源码的超详细步骤

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 因为我本人主要是写Java的,有强烈的IDE依赖症,不喜欢使用文本编辑器或者命令行这样的工具,所以选择使用CLion搭建一个IDE环境来辅助 Redis 源码阅读。

因为我本人主要是写Java的,有强烈的IDE依赖症,不喜欢使用文本编辑器或者命令行这样的工具,所以选择使用CLion搭建一个IDE环境来辅助阅读。但是CLion主要支持的是CMake管理的项目,而Redis是用普通的Makefile管理的,所以需要一些技巧来配置环境。

支持跳转


CLion从2018.2版本开始支持通过compiledb来让Makefile的项目支持跳转重构等高级功能。

首先安装compiledb:

pip install compiledb

务必在用CLion打开Redis项目之前进入Redis根目录,运行下面的命令:

compiledb -nfmake

之后会在项目根目录下生成一个compile_commands.json文件。

之后再用CLion打开Redis项目,这样CLion就会自动检测到compile_commands.json,就可以读Redis源码时进行各种跳转了。

调试Redis


完成上面的步骤后,依旧只能把CLion当个阅读器来读代码,无法单步调试的话还是不方便理解源码。

经过一番研究,发现可以使用CLion的"GDB Remote Debug"的功能对Redis的二进制结合源码进行调试。

首先,要编译出一个专门用于debug的二进制,make默认采用的编译优化级别的是-O2,代码优化会影响我们调试,所以我们编译一个没有优化的版本便于调试:

make noopt

之后使用gdbserver来执行该二进制(如果还有安装的话,就先安装gdbserver):

gdbserver :43211 ./src/redis-server

上面命令表示在43211端口启动一个gdbserver,用于调试二进制./src/redis-server

之后在CLion上进行配置Run -> Edit Configurations

clion-conf.png

打好断点,点击右上角的小虫子,就可以开心地调试Redis了。

调试的截图如下:

clion-debug.png

目前发现该调试方法的一个问题就是当gdbserver退出后,它所启动的二进制进程依旧不会退出,需要手动kill一下,以免占用端口影响下次debug:

$ ps-ef | grep ./src/redis
dqyuan   118421021:40 pts/5    00:00:00 ./src/redis-server *:6379
dqyuan   1226626302021:43 pts/2    00:00:00 grep--color=auto ./src/redis
$ kill-911842

参考文章


End


作者:元青


微信公众号 「技乐书香」

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
存储 缓存 NoSQL
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(一)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
53 0
|
1月前
|
NoSQL 安全 Unix
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅(中)
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅
25 0
|
1月前
|
NoSQL API Redis
Redis源码(1)基本数据结构(上)
Redis源码(1)基本数据结构
35 2
|
1月前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
68 0
|
8天前
|
分布式计算 NoSQL 大数据
MaxCompute产品使用合集之自定义udf连接云上vpc网络的redis获取数据的步骤是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1月前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
1月前
|
存储 NoSQL Redis
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群(下)
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群
236 1
|
1月前
|
监控 NoSQL Redis
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群(上)
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群
286 0
|
1月前
|
存储 NoSQL 调度
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅(下)
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅
20 0
|
1月前
|
存储 NoSQL API
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅(上)
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅
28 1