官方 Redis 不支持 Windows 环境下构建运行,如希望在 Windows 环境下跟踪调试 Redis 源码,可使用 CLion 的远程开发模式。

1. 概述

CLion 的远程调试有两种模式:

Remote GDB Server:仅支持 cmake 项目,CLion 可自动构建二进制文件并上传到远程服务器,并自动调用 gdbserver 执行程序。

Remote Debug:可支持非 cmake 项目,需手动在远程服务器端完成首次构建,并将可执行文件和符号表下载到本地环境。

由于 Redis 通过 makefile 进行构建,并非 cmake 项目,所以需采用 Remote Debug 模式。

Remote DebugRemote GDB Server
Project formatAnyCMake
ToolchainNot specifiedDefault on macOS/Linux; MinGW, Cygwin, WSL on Windows; Remote and Docker toolchains also available
Path mappingsNot created automatically, should be set up in run/debug configurationNot created automatically,should be set up in run/debug configuration

2. 环境准备

本地系统: Windows(Windows 10)

远程系统: Linux(Ubuntu 22.04)

IDE: CLion 2023.2.5

Step 1: 安装依赖(远程 Linux)

sudo apt install gcc
sudo apt install g++
sudo apt install pkg-config
sudo apt install gdb
sudo apt install gdbserver
sudo apt install cmake

Step 2: 源码编译(远程 Linux)

# 下载 Redis 源码
wget https://github.com/redis/redis/archive/refs/tags/7.4.2.tar.gz

# 解压
tar -xvf 7.4.2.tar.gz

# 修改目录名称
mv redis-7.4.2 redis-7.4.2-stable

# 进入源码目录
cd redis-7.4.2-stable/

# 编译
make -j18 "CFLAGS=-g -O0"
  • Redis 源码解压请在 Linux 系统端完成,否则编译时可能因为执行权限等因素导致编译失败。
  • 如前所述,采用 Remote Debug 模式需在 Linux 系统端手动完成第一次编译。
  • CFLAGS="-O0":不开启编译优化。
  • CFLAGS="-g":生成调试信息(用于GDB)。
  • -j18:并发编译,其中 18 一般为 CPU 核心数,请自行根据硬件进行调整。

3. 远程调试配置

Step 1: 配置 SSH

SSH Configurations

Step 2: 配置 Toolchain

Toolchain

Step 3: 配置 Deployment

1、创建 Remote Host

Remote Host

2、建立目录映射

Path Mapping

Step 4: 文件同步

1、选择远程服务器

File Sync

2、下载文件

File Download

右键点击项目,选择 “Deployment” → “Download from Remote Development”,将文件从远程服务器下载到本地。

下载完成后,如下图所示,源码文件及编译的相关二进制文件均已下载到本地。

File Downloaded

Step 5: 调试配置

1、获取应用列表

一般来说,CLion 会自动识别 makefile 项目,并自动创建如下图的应用列表。

Applications

如果没有自动创建如上图的可运行的应用列表,点击 “Tools” → “Makefile” → “Reload Makefile Project” 后将自动生成。

Applications-2

如果还是没有自动创建,那么你可能需要手动创建 “Makefile Application”。

2、指定可执行文件

Remote Debug 模式,需手动指定可执行文件,这里以 redis-server 为例进行说明。

Executable

Step 6: 开始调试

1、断点调试

添加断点,然后点击调试按钮,可以看到程序正常启动,并在断点处暂停。

Debug

2、代码修改

  1. 添加一行新代码 printf("redis remote debug start ----------\n")
  2. 点击 RunCLion 将自动调用远程服务器进行编译,并通过 gdbserver 运行对应执行文件。
  3. 如下图所示,可以看到代码修改生效,控制台打印出了新添加的信息。

Edit Code

注意事项

为了保证生成的二进制文件与代码一致,同样需在 CLion 中添加 Makefile 的构建参数。

Build options

4. Remote Debug 小结

  1. Redis 源码需在远程 Linux 端解压,并手动完成第一次编译。
  2. CLion 中配置 SSHToolchainDeployment
  3. 源码和相关二进制文件都下载到本地 Windows
  4. CLion 中指定应用程序对应的可执行文件后,即可运行和调试(无需在远程 Linux 手动运行 gdbserver)。
  5. 本地修改代码后,会自动上传。
  6. 点击 RunDebugBuild 按钮,会自动在远程 Linux 进行编译(无需在远程 Linux 手动编译)。

5. 其它方式

JetBrains 还提供了 Gateway 瘦客户端,用来连接远程服务器后台运行的 CLion ,同样也支持 makefile 项目的远程开发和调试。

这种方式更简单,但需在远程服务器安装和运行 CLion,感觉略有点重,后续有时间再聊。

6. 参考资料

https://www.jetbrains.com/help/clion/remote-development.html