gdb调试doris_be

环境准备

使gdb调试时,能正确访问源码的方法

  1. 若测试环境与编译环境在同一个节点,在使用docker时映射源码路径与真实源码路径完全一致即可

例如:

1
-v /data1/workspace/gaoyuanfeng/gyf-doris/doris:/data1/workspace/gaoyuanfeng/gyf-doris/doris
  1. 若测试环境与编译环境不在同一个节点,那么只需要在测环境下放置一份代码,代码所在路径要与编译环境的路径一致

检查测试环境gdb版本

要求gdb版本不低于10.2

1
gdb --version

若无网环境,可手动安装gdb 14.1,以下是手动安装gdb到用户目录下的示例:

  1. 先下载并上传以下安装包到服务器用户根目录下

gmp-6.3.0
mpfr-4.2.1
gdb-14.1

  1. 执行以下操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cd
mkdir .gmp .mpfr .gdb
tar xvf /gmp-6.3.0.tar.xz
cd gmp-6.3.0
./configure --prefix=$HOME/.gmp
make -j64
make install
cd
tar xvfz mpfr-4.2.1.tar.gz
cd mpfr-4.2.1
./configure --prefix=$HOME/.mpfr --with-gmp=$HOME/.gmp
make -j64
make install
cd
tar xvfz gdb-14.1.tar.gz
cd gdb-14.1
./configure --prefix=$HOME/.gdb --with-gmp=$HOME/.gmp --with-mpfr=$HOME/.mpfr
make -j64
make install
cd
echo 'export PATH=$HOME/.gdb/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

可根据需求自行修改安装目录

编译debug版doris_be

1
BUILD_TYPE=Debug sh build.sh

gdb调试

  1. fe.conf添加配置

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

1
max_backend_heartbeat_failure_tolerance_count = 100

参数官方说明

  1. 启动doris

  2. 调试

1
gdb -p {be_pid}

使用vscode调试

  1. 安装 C/C++ 插件,也可下载离线包进行安装cpptools

  1. 配置launch.json, 也可在工作目录下手动创建 .vscode/launch.json
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Attach",
"type": "cppdbg",
"request": "attach",
"program": "/data09/workspace/gaoyuanfeng/gyf-doris/doris/output/be/lib/doris_be",
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"miDebuggerPath": "/home/gaoyuanfeng/.gdb/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/data09/workspace/gaoyuanfeng/gyf-doris/doris/output/be/lib/doris_be",
"args": [],
"stopAtEntry": false,
"cwd": "/data09/workspace/gaoyuanfeng/gyf-doris/doris/output/be",
"environment": [
{
"name": "DORIS_HOME",
"value": "/data09/workspace/gaoyuanfeng/gyf-doris/doris/output/be"
},
{
"name": "UDF_RUNTIME_DIR",
"value": "/data09/workspace/gaoyuanfeng/gyf-doris/doris/output/be/lib/udf-runtime"
},
{
"name": "LOG_DIR",
"value": "/data09/workspace/gaoyuanfeng/gyf-doris/doris/output/be/log"
},
{
"name": "PID_DIR",
"value": "/data09/workspace/gaoyuanfeng/gyf-doris/doris/output/be/bin"
}
],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/home/gaoyuanfeng/.gdb/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

根据实际情况修改gdb等路径

  1. 演示