ReZero's Utopia.

Clion remote debug docker redis

Word count: 901Reading time: 3 min
2021/07/17 Share

Clion remote debug docker redis

垃圾MAC m1

redis 版本用的是官方的 5.0, 鲁迅说的用 5.0,中国人的性情总是喜欢调和、折中的,譬如你说,这屋子太暗,说在这里开一个天窗,大家一定是不允许的。但如果你主张拆掉屋顶,他们就会来调和,愿意开天窗了

关于 docker, 嘿嘿我不会,所以网上找了找试了试大致凭直觉猜了猜貌似还可以

因为 m1 现在看起来好像什么都不太支持,所以本教程倾向于一切都靠docker里的,只保留和docker的通信

首先 docker 下官方 m1 适配的

容器相关的文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
FROM ubuntu:latest

RUN apt-get update

RUN apt-get install -y build-essential

# 因为cmake安装的时候会出现交互选项,就是让你按y,选语言啥的,所以加了这个选项
RUN DEBIAN_FRONTEND='noninteractive' apt-get install -y cmake

RUN apt-get install -y gdb

RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
# 这里注意下和实际的ubuntu配置对比下
RUN sed -ri 's/^#PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config

RUN apt-get install -y rsync
RUN sed -ri 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync
COPY rsync.conf /etc

RUN echo 'root:000000' |chpasswd

RUN mkdir /root/sync

COPY entrypoint.sh /sbin
RUN chmod +x /sbin/entrypoint.sh
ENTRYPOINT [ "/sbin/entrypoint.sh" ]

常见的软件就不用说了, rsync就是个传文件的,上面配置中涉及的额外两个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#rsync.conf
# 编辑配置信息
max connections = 8
log file = /var/log/rsync.log
timeout = 300

[sync] # 模块名
comment = sync
# path为需要同步的文件夹路径
path = /root/sync
read only = no
list = yes
uid = root
gid = root
1
2
3
4
5
6
7
# entrypoint.sh
#!/bin/bash

/usr/bin/rsync --daemon --config=/etc/rsync.conf
/usr/sbin/sshd -D


最后准备一个 compose, 看起来应该是 Dockerfile 的最后五十米

1
2
3
4
5
6
7
8
9
10
11
version: "3"

services:
env:
build: .
container_name: clion-gdb
ports:
- "45678:22"
- "8730:873"
cap_add:
- ALL

如果以上觉得太麻烦的话,直接下这个文件夹也行

clion with docker

准备好这个文件夹后, docker-compose up -d
容器的安装操作其实就是下载这个文件夹然后执行这一条命令

后面的 Clion 就是参考这个链接了

full remote debug

  1. 先 toolchain里配置下, 大致就是填个 ssh 连接, 确保能测通就行

  1. 下载好 redis 源码的时候 会识别成 make 项目, 这里我不会 cmake,所以就按 make 来吧

    • Preferences | Build, Execution, Deployment | Makefile 配置项里只选你刚才配置的那个 toolchain 即可
  2. 然后就是文件的上传下载配置了,·Preferences | Build, Execution, Deployment | Deployment

    • 配置下 SFTP,用户密码,其实配了个刚才的ssh后直接选就行了, 其次就是第二个选项卡,配置下本地的项目路径和远程的目标路径

  1. 这一步配好之后右键项目目录,选 Deployment, 把本地的目录上传到远程的 /root/sync 目录即可

然后就是我尝试出来但最不理解的一步了

官方说让选远程的可执行文件,没明白为啥不是直接调远程的编译然后再选择

  1. 所以进入容器 docker exec -it container-hash /bin/bash
  2. 然后进入目标目录 cd /root/sync/src , 先 chmod +x src/mkreleasehdr.sh && ./mkreleasehdr.sh
  3. 再然后 make 一下, 就会在 src 目录下生成 redis-server 的可执行文件,打印下这个路径拷贝出来
  4. Clion clone redis 项目后会自动识别出来可运行的 configurations, 我们选中其中的 redis-server, 只更改 executable 把执行文件的路径填进去
  5. 然后去 redis-server.c 中的 main 打个断点即可
CATALOG
  1. 1. Clion remote debug docker redis
    1. 1.1. 垃圾MAC m1
    2. 1.2. 首先 docker 下官方 m1 适配的
      1. 1.2.1. 后面的 Clion 就是参考这个链接了
      2. 1.2.2. 然后就是我尝试出来但最不理解的一步了