2021-05-20 clickhouse 调试环境搭建

下载clickhouse 代码

git clone --recursive https://github.com/ClickHouse/ClickHouse.git

使用clion打开工程

clickhouse 默认使用clang编译,使用ninja构建,
但是由于clion使用make构建工程,所以不用装ninja了:

安装 clang-8

echo "deb [trusted=yes] http://apt.llvm.org/bionic/ llvm-toolchain-bionic-8 main" | sudo tee /etc/apt/sources.list.d/llvm.list
sudo apt-get update
sudo apt-get install clang-8

配置clion的settings
编译时只起一个线程 -j 1

执行server

/data1/mycode/ClickHouse/programs/server/config.xml

./cmake-build-debug/programs/clickhouse-server --config=/data1/mycode/ClickHouse/programs/server/config.xml --pid-file=/data1/mycode/ClickHouse/clickhouse-server.pid

attch 进程进行调试

报错:
显示 ptrace: Operation not permitted.

解决:
(1)临时方法

将/proc/sys/kernel/yama/ptrace_scope虚拟文件的内容设为0。

echo 0 > /proc/sys/kernel/yama/ptrace_scope

重启之后失效。

(2)永久解决

编辑/etc/sysctl.d/10-ptrace.conf这个文件,若没有,创建之。设置(默认是1)

kernel.yama.ptrace_scope = 0

通过 gdb server 调试已经启动的clickhouse server

gdbserver localhost:2333 --attach [clickhouse server pid]
GDB_Remote_Debug_Config

通过 attach 直接调试

<img src="C:\Users\jiangzhihao\AppData\Roaming\Typora\typora-user-images\image-20210520143455777.png" alt="image-20210520143455777" style="zoom:67%;" />

代码结构

main 函数

programs/main.cpp

主程序会根据指令分发到 programs 目录下的程序中处理, 目前关注server ,

所以分发到programs/server/Server.cpp


打断点的位置

#src/Server/TCPHandler.cpp

TCPHandler.runImpl()
{
    ...
    while(true) {
        receivePacket()

        /// Processing Query
        state.io = executeQuery(state.query, query_context, false, state.stage);

        if (state.io.out)
            state.need_receive_data_for_insert = true;

        if (state.need_receive_data_for_insert)
            processInsertQuery(global_settings);
        else
            processOrdinaryQuery();

    ...     
}

登录server 执行命令 , 会停留在断点处

./cmake-build-debug/programs/clickhouse-client

> select database()

问题

1. 调试环境占用内存较高 最少 14G内存 

所以调试环境一直运行不起来 , 目前只能看文章学习

直接使用gdb调试

安装 gdb

apt -y install gdb

gdb 启动进程

gdb --args ./cmake-build-debug/programs/clickhouse-server --config=/data1/mycode/ClickHouse/programs/server/config.xml --pid-file=/data1/mycode/ClickHouse/clickhouse-server.pid

设置断点

break 文件名 : 行号

b src/Server/TCPHandler.cpp:168

开始运行

r 

查看运行位置代码

l

删除断点

delete 4

文档

http://c.biancheng.net/view/8153.html

sublime gdb调试环境

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容