下载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