Windows系統(tǒng)上搭建Clickhouse開發(fā)環(huán)境
總體思路
微軟的開發(fā)IDE是很棒的词裤,有兩種:Visual Studio 和 VS Code一罩,一個重量級,一個輕量級。近年來VS Code越來越受歡迎栖博,因為她的輕量級和豐富的插件,更重要的是VS Code消耗資源更少厢洞,打開大項目的時候不會崩潰仇让。因此選用VS Code。
Clickhouse只能在Linux和MacOS上編譯和運行躺翻,而開發(fā)機器是Windows 10系統(tǒng)丧叽,因此需要虛擬機或者WSL。WSL是Windows subsystem Linux公你,Windows 10原生支持踊淳,因此采用WSL。
調(diào)試用linux下最常用的GDB,在WSL環(huán)境中用GDB調(diào)試clickhouse迂尝,而開發(fā)環(huán)境運行在Windows上脱茉,這就需要遠程連接GDB。
下面是具體步驟垄开。
構建clickhouse的debug build
Clickhouse默認是通過靜態(tài)鏈接構建出一個完整的release版的運行文件:clickhouse琴许,大小在1G以上。這個巨大的單體release版本的可執(zhí)行文件并不利于調(diào)試溉躲。為了開發(fā)和調(diào)試榜田,我們需要symbol文件,需要把單體巨型文件拆散成一群動態(tài)鏈接庫小文件锻梳,因此需要特殊的cmake構建參數(shù)箭券。
執(zhí)行以下步驟完成debug構建,有問題參考clickhouse官方文檔 Build on Linux | ClickHouse Documentation
安裝WSL
在管理員PowerShell中運行wsl --install
疑枯,有問題參考微軟官方文檔 安裝 WSL | Microsoft Docs安裝構建工具cmake邦鲫、ninja
在WSL環(huán)境中,運行sudo apt-get install -y git cmake python ninja-build
神汹,有問題參考google庆捺。安裝clang編譯器,該編譯器效率比gcc據(jù)說還要好
在WSL環(huán)境中屁魏,運行sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
-
下載clickhouse代碼
git clone https://github.com/ClickHouse/ClickHouse.git cd ClickHouse git submodule update --init --recursive
-
加參數(shù)編譯我們需要的clickhouse的適合開發(fā)調(diào)試的版本
export CC=clang-13 export CXX=clang++-13 cd ClickHouse mkdir build cd build cmake .. \ -DUSE_STATIC_LIBRARIES=0 \ -DSPLIT_SHARED_LIBRARIES=1 \ -DCLICKHOUSE_SPLIT_BINARY=1 \ -DCMAKE_BUILD_TYPE=Debug ninja
USE_STATIC_LIBRARIES=0 -- 不用編譯成靜態(tài)鏈接
SPLIT_SHARED_LIBRARIES=1 -- 拆開成共享庫
CLICKHOUSE_SPLIT_BINARY=1 -- 編譯的二進制文件拆開
-
(可選)只編譯clickhouse client和server
cmake .. \ -DCMAKE_C_COMPILER=$(which clang-13) \ -DCMAKE_CXX_COMPILER=$(which clang++-13) \ -DCMAKE_BUILD_TYPE=Debug \ -DENABLE_CLICKHOUSE_ALL=OFF \ -DENABLE_CLICKHOUSE_SERVER=ON \ -DENABLE_CLICKHOUSE_CLIENT=ON \ -DENABLE_LIBRARIES=OFF \ -DUSE_UNWIND=ON \ -DENABLE_UTILS=OFF \ -DENABLE_TESTS=OFF \ -DUSE_STATIC_LIBRARIES=0 \ -DSPLIT_SHARED_LIBRARIES=1 \ -DCLICKHOUSE_SPLIT_BINARY=1
配置開發(fā)環(huán)境
安裝VS Code
從微軟官網(wǎng)上下載并運行VSCode滔以,不再贅述。
安裝好VS Code之后氓拼,打開VS Code安裝C++插件:Microsoft C/C++你画。
關聯(lián)WSL中的代碼倉庫
因為編譯和運行在WSL中,開發(fā)在Windows中桃漾,要讓兩邊同步坏匪。最好的辦法就是Windows環(huán)境中VS Code所修改的代碼就是WSL中編譯運行的代碼。好在Windows環(huán)境中可以直接通過\\wsl$
去訪問WSL中的文件系統(tǒng)撬统,再通過Windows的把網(wǎng)絡路徑映射成盤符的功能适滓,我們就能夠像訪問本地磁盤那樣訪問WSL中的文件系統(tǒng)。
這樣WSL中的/home/alex/depot/ch-pro代碼目錄就映射成了 Z:\home\alex\depot\ch-pro 代碼目錄恋追。用VS Code打開 Z:\home\alex\depot\ch-pro目錄凭迹,修改其代碼會直接修改WSL中的代碼。
VS Code調(diào)試運行配置
在WSL環(huán)境中安裝gdb苦囱,apt install gdb
重要 在VS Code中新建運行配置./.vscode/launch.json
嗅绸。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(clickhouse) 啟動",
"type": "cppdbg",
"request": "launch",
"program": "/home/alex/depot/ch-pro/build/programs/clickhouse-server",
"args": [],
"stopAtEntry": false,
"cwd": "/home/alex/depot/ch-pro",
"environment": [{"name": "CLICKHOUSE_WATCHDOG_ENABLE", "value":0}],
"externalConsole": true,
"windows": {
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
"pipeTransport": {
"pipeCwd": "",
"pipeProgram": "C:\\Windows\\System32\\bash.exe",
"pipeArgs": ["-c"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/mnt/c": "C:\\",
"/usr": "Z:\\usr",
"/home": "Z:\\home"
}
}
]
}
注意
"environment": [{"name": "CLICKHOUSE_WATCHDOG_ENABLE", "value":0}]
這行尤為重要,以為非從terminal上啟動的clickhouse都會把啟動進程變成一個watch dog進程撕彤,啟動另外一個進程作為真正的clickhouse進程鱼鸠,那么調(diào)試時attach到的進程是啟動進程也就是watch dog進程,無法調(diào)試真正的clickhouse代碼。必須設置環(huán)境變量CLICKHOUSE_WATCHDOG_ENABLE=0來阻止clickhouse這么做蚀狰。
遠程啟動clickhouse并調(diào)試漆弄,如圖所示:
走到斷點成功中斷運行卻提示找不到源代碼文件,需要設置gdb的設置造锅,set substitute-path <from_path> <to_path>
添加地址轉(zhuǎn)換撼唾。
正常情況下,就已經(jīng)可以斷點調(diào)試了哥蔚。
修改完代碼之后倒谷,如果有文件增刪,則需要重新運行cmake糙箍,如果只是修改文件渤愁,則只需要運行ninja。ninja會只編譯修改過的文件深夯。