Clion遠程編譯調試 ClickHouse


參考:Clion遠程調試C++

Clion遠程調試的兩種方法:

  1. Clion本地與服務器端代碼同步后,服務器端通過gdbserver監聽端口,本地Clion連接調試
  2. Clion通過Toolchains實現遠端執行調試

(方法一未實踐,感覺略繁瑣,此處使用方法二)

1 下載ClickHouse代碼

此處將代碼解壓在本地:/Users/wyj/my_project/ClickHouse

同時,上傳至服務器:/mnt/ClickHouse

服務器項目目錄下創建.clion.source.upload.marker文件

ssh ubuntu@10.10.7.2
touch /mnt/ClickHouse/.clion.source.upload.marker

可以不上傳至服務器,但會導致本地項目編譯時upload至服務器巨長時間。

若代碼在本地和服務器都存在,則可通過此步驟,解決第一次編譯時upload很慢問題。

參考:Remote project file transfer is slow

2 Clion配置

配置Toolchains:Preferences->Build,Execution,Deployment->Toolchains

  • 點加號,添加一個 Remote Host
  • Credentials 設置服務器信息
  • 其他配置會自動檢測

ClickHouse需要至少gcc11、g++11,如果默認不是這個版本,這里可以指定一下

image-20220111171634881

配置CMake:Preferences->Build,Execution,Deployment->CMake

  1. 如果需要Cmake 有-DCMAKE_BUILD_TYPE=Debug 參數,設定Build type為Debug
  2. Toolchain選擇我們上一步設置好的Toolchain
  3. ClickHouse使用Ninja編譯,這里Generator選擇Ninja,相當於Cmake添加-G Ninja參數(cmake命令后會生成ninja規則)
  4. Build directory可設置build目錄名稱
image-20220111172944320

配置Deployment:Preferences->Build,Execution,Deployment->Deployment

  • 若前兩步配置好了,此處會自動出現一個Remote development

  • 設置Mapping:Local path為本地項目根目錄,Deployment path為服務器對應項目根目錄

    默認 Deployment path 為/tmp/randomNumber

image-20220111174115519
image-20220111174326259

點擊apply后,會自動開始cmake。

若要在服務器端直接編譯:

cmake后,在/mnt/ClickHouse/cmake-build-debug 目錄下直接運行ninja

(因為cmake ... -G Ninga 已經創建了build.ninja、rules.ninja)

3 設置項目更改自動同步服務器

勾選 Tools->Deployment->Automatic Upload(Always)

image-20220111175826997

4 調試 ClickHouse(Clion調試)

點擊右上角,選擇Edit Configuration

image-20220111181723849

clickhouse-server:

  1. 找到名為 clickhouse-server 的 Target
  2. Executor 選擇 clickhouse 執行文件
  3. 設置執行參數:server --config-file=/mnt/ClickHouse/temp_data/config.xml
image-20220111181651522

config.xml文件模板在 ClickHouse/programs/server/config/xml

(需要更改其中注明的一些數據地址為本項目實際要存放的地址,如下圖)

image-20220111181233728

clickhouse-client:

  1. 找到名為 clickhouse-client 的 Target
  2. Executor 選擇 clickhouse 執行文件
  3. 設置執行參數:client
    • 默認用戶為default,密碼為空。設置用戶-u username,設置密碼 --password 123
image-20220111182135578

用戶信息由server的config.xml文件指定。用戶的users.xml模板在ClickHouse/programs/server/users.xml

image-20220111182541752

以上,已設置好server和client,可直接在Clion進行運行/斷點調試。

5 調試 ClickHouse(服務器直接調試)

在服務器上調試ClickHouse,第一次時需要通過ninja命令編譯項目。

ClickHouse的可執行文件在:/mnt/ClickHouse/cmake-build-debug/programs 目錄下:

(/mnt/ClickHouse/cmake-build-debug為編譯目錄)

image-20220111180817012

執行文件clickhouse,運行后有很多供參數選擇,輸入不同的參數會去執行對應的可執行文件:

image-20220111181331927

運行server:

./clickhouse-server --config=/mnt/ClickHouse/temp_data/config.xml  # 方一
./clickhouse server --config=/mnt/ClickHouse/temp_data/config.xml  # 方二

運行client:

./clickhouse client # -u username 設置用戶;--password 123 設置密碼

PS 服務器更新 gcc、g++

1 添加 ppa 到庫

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update 
sudo apt install gcc-11 g++-11

2 更換ppa源(因為ppa太慢了)

ustc鏡像就有ppa的反向代理。

每個ppa都會在/etc/apt/sources.list.d 目錄下創建一個list文件。

只需要將其中的http://ppa.launchpad.net替換為http://launchpad.proxy.ustclug.org就行。

sudo vi /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-focal.list 
sudo apt-get update 

3 設置 gcc

# 首先要讓系統知道我們安裝了多個版本的g++
# 命令最后的 100是優先級,如果使用auto選擇模式,系統將默認使用優先級高的
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
# 使用交互方式的命令選擇默認使用的版本
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
sudo update-alternatives --config g++
# 其他命令:
# 查詢系統中安裝有哪些版本
sudo update-alternatives --query g++

設置完成后,可執行 gcc --version 查看gcc版本。

PS2 錯誤 ld terminated with signal 9

服務器端直接編譯時(在/mnt/ClickHouse/cmake-build-debug 目錄下直接運行ninja)報錯

collect2: fatal error: ld terminated with signal 9 [Killed]

產生原因:內存不足

解決方法參考:ld terminated with signal 9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM