下載clickhouse 代碼
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
使用clion打開工程
clickhouse 默認使用clang編譯,使用ninja構(gòu)建,
但是由于clion使用make構(gòu)建工程,所以不用裝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
執(zhí)行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 進程進行調(diào)試
報錯:
顯示 ptrace: Operation not permitted.
解決:
(1)臨時方法
將/proc/sys/kernel/yama/ptrace_scope虛擬文件的內(nèi)容設(shè)為0。
echo 0 > /proc/sys/kernel/yama/ptrace_scope
重啟之后失效。
(2)永久解決
編輯/etc/sysctl.d/10-ptrace.conf這個文件,若沒有,創(chuàng)建之。設(shè)置(默認是1)
kernel.yama.ptrace_scope = 0
通過 gdb server 調(diào)試已經(jīng)啟動的clickhouse server
gdbserver localhost:2333 --attach [clickhouse server pid]

GDB_Remote_Debug_Config
通過 attach 直接調(diào)試
<img src="C:\Users\jiangzhihao\AppData\Roaming\Typora\typora-user-images\image-20210520143455777.png" alt="image-20210520143455777" style="zoom:67%;" />
代碼結(jié)構(gòu)
main 函數(shù)
programs/main.cpp
主程序會根據(jù)指令分發(fā)到 programs 目錄下的程序中處理, 目前關(guān)注server ,
所以分發(fā)到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 執(zhí)行命令 , 會停留在斷點處
./cmake-build-debug/programs/clickhouse-client
> select database()
問題
1. 調(diào)試環(huán)境占用內(nèi)存較高 最少 14G內(nèi)存
所以調(diào)試環(huán)境一直運行不起來 , 目前只能看文章學(xué)習(xí)
直接使用gdb調(diào)試
安裝 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
設(shè)置斷點
break 文件名 : 行號
b src/Server/TCPHandler.cpp:168
開始運行
r
查看運行位置代碼
l
刪除斷點
delete 4
文檔
http://c.biancheng.net/view/8153.html