Doris开发环境搭建+vscode+开发容器+debug

Doris 官方提供了现成的 Docker 开发镜像,仅用于编译代码是完全足够了,但直接用于阅读代码,debug调试,还是有所欠缺,本文将基于官方开发镜像打造极为舒适的 doris 开发环境

环境要求

远程 Linux 服务器安装 docker 并启动 docker 服务

安装 vscode 扩展插件

根据需要在远程 Linux 服务器中安装扩展插件

be 端(以C++代码为主), 必装插件如下:

  • clangd (阅读C++代码, 需要glibc版本 >= 2.18)
  • CMakeCMake Tools
  • CodeLLDB (debug调试be)
  • Language Support for Java(TM) by Red Hat (阅读java部分的代码)
  • Git GraphGitLens — Git supercharged (git管理,需要git版本 >= 2.7.2)
  • Docker (方便在远程 Linux 服务器上管理与使用 docker)

若登录远程 Linux 服务器的角色为普通用户,需要先使用以下命令授予该用户 docker 权限, 并重新连接

1
sudo usermod -aG docker username

vscode 需要执行下图命令进行重连,否则不会生效

启动容器

  1. 创建 docker-compose.yml 文件,复下面的代码,根据实际情况修改 volumes 中的路径
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
version: '3.4'

services:
doris:
container_name: my-doris-build-env
image: apache/doris:build-env-ldb-toolchain-latest
network_mode: "host"
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
privileged: true
environment:
- TZ=Asia/Shanghai
volumes:
- /home/doris/.ssh:/root/.ssh # 映射SSH密钥
- /home/doris/.vscode-server:/root/.vscode-server # 映射VSCode服务器设置
- /home/doris/doris:/root/doris # 映射Doris源码
- /home/doris/.m2:/root/.m2 # 映射Maven仓库, 保存到主机,便于持久化
# 在容器启动时执行一系列命令:
# 编译安装glibc-2.18, git-2.36.6, bash-completion, 并清理临时文件与缓存
# tail -f /dev/null 保持容器后台运行
command: /bin/bash -c "
if [ ! -f /lib64/libc-2.18.so ]; then \
cd /root && \
wget --no-check-certificate https://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz && \
tar xvfz glibc-2.18.tar.gz && \
mkdir -p glibc-2.18/build && \
cd glibc-2.18/build && \
export CC=/usr/bin/gcc && \
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin && \
make -j8 && \
make install && \
rm -rf /root/glibc-2.18*; \
fi && \
if [[ ! $(git --version | awk '{print $3}') =~ '2.36.6' ]]; then \
yum install -y https://repo.ius.io/ius-release-el7.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && \
yum remove git -y && \
yum install -y bash-completion git236 && \
yum clean all && \
rm -rf /var/cache/yum; \
fi && \
tail -f /dev/null"
  1. 启动容器

  1. 连接开发容器

点左侧远程资源管理器,选择开发容器,然后登录到容器中,选择 在当前文件中附加在新窗口中附件 都可

若无开发容器选项,则需要先安装 Dev Containers 扩展插件

在vscode 左下角可以看到连接到的容器

进入容器中,可以下使用以下命令检查 glibc-2.18 和 git 是否安装完毕

1
2
getconf GNU_LIBC_VERSION
git --version

若如上图显示,glibc-2.18 和 git 则已安装完毕

  1. 保存容器为新镜像

若担心容器被意外删除,可以在远程 Linux 服务器上将现有容器保存为新镜像,下次直接使用新镜像启动容器即可,无需重新安装 glibc-2.18 和 git

基本语法如下:

1
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

例如:

1
docker commit my-doris-build-env doris:vscode-build-env

配置 settings.json

修改 settings.json 文件,添加以下内容,没有则在工作目录下手动创建 .vscode/settings.json

1
2
3
4
5
6
7
8
9
10
{
"clangd.arguments": [
// compile_commands.json 文件所在目录,需要先编译代码,才会生成该文件,根据实际情况调整
"--compile-commands-dir=${workspaceFolder}/be/build_Debug"
],
// 使用原生表达式(debug)
"lldb.launch.expressions": "native",
// java 插件很吃内存,根据实际情况调整,若太小插件会报错但可以忽视
"java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx12G -Xms12G",
}

debug

  1. 编译debug版
1
BUILD_TYPE=Debug sh build.sh --fe --be

Debug 大小写不同,会导致 build 目录名不同
BUILD_TYPE=Debug 生成的目录为 build_Debug
BUILD_TYPE=debug 生成的目录为 build_debug

  1. 修改 be fe 配置

根据实际情况,修改配置,其中 fe.conf 需要添加配置

目的:避免因为gdb调试中因超过心跳时间限制导致超时,进而SQL执行报错而终止

1
2
3
bdbje_heartbeat_timeout_second = 600
remote_fragment_exec_timeout_ms = 600000
max_backend_heartbeat_failure_tolerance_count = 100
  1. 配置launch.json

添加以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
// 使用附加的方式
"request": "attach",
"name": "Debug",
// be可执行程序路径, 根据实际情况修改
"program": "${workspaceFolder}/output/be/lib/doris_be"
}
]
}

若没有,可以手动在 .vscode 目录下创建 launch.json

  1. 启动be 与 fe,debug be