Windows系統(tǒng)上搭建Clickhouse開發(fā)環(huán)境

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

  1. 安裝WSL
    在管理員PowerShell中運行wsl --install疑枯,有問題參考微軟官方文檔 安裝 WSL | Microsoft Docs

  2. 安裝構建工具cmake邦鲫、ninja
    在WSL環(huán)境中,運行sudo apt-get install -y git cmake python ninja-build神汹,有問題參考google庆捺。

  3. 安裝clang編譯器,該編譯器效率比gcc據(jù)說還要好
    在WSL環(huán)境中屁魏,運行sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"

  4. 下載clickhouse代碼

    git clone https://github.com/ClickHouse/ClickHouse.git
    cd ClickHouse
    git submodule update --init --recursive
    
  1. 加參數(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 -- 編譯的二進制文件拆開

  2. (可選)只編譯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)。

image.png

這樣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)試漆弄,如圖所示:

image.png

走到斷點成功中斷運行卻提示找不到源代碼文件,需要設置gdb的設置造锅,set substitute-path <from_path> <to_path> 添加地址轉(zhuǎn)換撼唾。

正常情況下,就已經(jīng)可以斷點調(diào)試了哥蔚。

image.png

修改完代碼之后倒谷,如果有文件增刪,則需要重新運行cmake糙箍,如果只是修改文件渤愁,則只需要運行ninja。ninja會只編譯修改過的文件深夯。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抖格,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咕晋,更是在濱河造成了極大的恐慌雹拄,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掌呜,死亡現(xiàn)場離奇詭異滓玖,居然都是意外死亡,警方通過查閱死者的電腦和手機质蕉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門势篡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人模暗,你說我怎么就攤上這事禁悠。” “怎么了兑宇?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵碍侦,是天一觀的道長。 經(jīng)常有香客問我顾孽,道長祝钢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任若厚,我火速辦了婚禮,結果婚禮上蜒什,老公的妹妹穿的比我還像新娘测秸。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布霎冯。 她就那樣靜靜地躺著铃拇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沈撞。 梳的紋絲不亂的頭發(fā)上慷荔,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音缠俺,去河邊找鬼显晶。 笑死,一個胖子當著我的面吹牛壹士,可吹牛的內(nèi)容都是我干的磷雇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼躏救,長吁一口氣:“原來是場噩夢啊……” “哼唯笙!你這毒婦竟也來了?” 一聲冷哼從身側響起盒使,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤崩掘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后少办,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呢堰,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年凡泣,在試婚紗的時候發(fā)現(xiàn)自己被綠了枉疼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞋拟,死狀恐怖骂维,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贺纲,我是刑警寧澤航闺,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站猴誊,受9級特大地震影響潦刃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懈叹,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一乖杠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澄成,春花似錦胧洒、人聲如沸畏吓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菲饼。三九已至,卻和暖如春列赎,著一層夾襖步出監(jiān)牢的瞬間宏悦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工包吝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饼煞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓漏策,卻偏偏與公主長得像派哲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掺喻,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容