真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ClickHouse如何在windows下編譯調(diào)試

今天就跟大家聊聊有關(guān)ClickHouse如何在windows下編譯調(diào)試,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到桐廬網(wǎng)站設(shè)計與桐廬網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋桐廬地區(qū)。

什么是 ClickHouse

大數(shù)據(jù)時代,每一條數(shù)據(jù)都攜帶著一種信息,各種優(yōu)傳感器,網(wǎng)關(guān),IOT 設(shè)備無時無刻都在用日志輸出著自己的運行信息。這些信息被存儲后經(jīng)過多維度計算就組成了我們現(xiàn)在的大數(shù)據(jù)環(huán)境。為了便于計算,出現(xiàn)了非常多優(yōu)秀的數(shù)據(jù)庫及組件,他們都在自己擅長的領(lǐng)域解決著各種場景的問題,其中就有一款在 OLAP 場景下,以驚艷的性能指標橫空出世的數(shù)據(jù)庫, 這就是 ClickHouse 。
它是保守的俄羅斯一家商業(yè)公司 Yandex (類似中國的百度)在 2016 年開源的。今天我并不打算講解 ClickHouse 有什么特性,因為當你首先對這款數(shù)據(jù)庫感興趣時,有志者肯定第一想法是,“Talk is cheap, Show me the code?!?但對于大型工程,代碼下載是容易的,一些框架復(fù)雜,動態(tài)調(diào)用時才能清晰知道流程的項目,編譯出來調(diào)試一次,會對邏輯有更深的理解,也會降低閱讀難度,今天要講的便是如何編譯調(diào)試,尤其是在 windows 下利用強大的 Visual Studio 來調(diào)試 ClickHouse。

編譯準備

我先預(yù)設(shè)大家的水平都會知道一些基礎(chǔ)編譯信息,這里只做要求:

  1. WSL 或者 CentOS 7, 我習(xí)慣于在 windows 下減少虛擬機消耗,這兩者環(huán)境區(qū)別不大;

  2. GCC 7.4.0,ClickHouse 大量運用了 C++17 語法,要求編譯器版本為 7.4;

  3. cmake 3.14.5, 這個下載包直接解壓,建立軟鏈即可

  4. ninja 1.9.0, 直接下載對應(yīng)包,解壓即可

  5. Visual Studio, 我用的是 VS2019

編譯過程

下載源碼

盡量在 linux 環(huán)境下(包括 WSL)使用 git 下載,應(yīng)該 ClickHouse 引用了很多外部開源工程,在拉取過程中有些源文件是會建立軟鏈接的,如果在 windows 下,這些軟鏈接會建立失敗,導(dǎo)致后期編譯時錯誤。也不用直接在 git 上下載源碼包,這樣外部引用的開源工程都不會被拉取,造成編譯不過。

// 拉取
git clone --recursive https://github.com/yandex/ClickHouse.git
cd ClickHouse

// 切換到 19.7 分支,或者一開始只拉取該分支代碼
git tag -l
git checkout v19.7.3.9-stable

開始編譯

mkdir build
cd build
cmake ..
ninja clickhouse

驗證編譯結(jié)果

dbms/programs/clickhouse server -V
ClickHouse server version 19.7.3.1

如果出現(xiàn)上面結(jié)果,那么你已經(jīng)成功了。
但,還沒有達到我們的目的,我們是需要在 windows 下調(diào)試起來。

調(diào)試編譯準備

為什么要重新編譯

由于默認情況下,ClickHouse 是編譯成靜態(tài)模塊,打包成一個大程序。為了便于后期更改代碼調(diào)試時減少鏈接時間,我們修改為編譯為動態(tài)鏈接庫的形式,這樣也可以逐模塊探索。還有,默認情況下,ClickHouse 是非 DEBUG 模式的,由于在內(nèi)存管理這塊,在 DEBUG 和非 DEBUG 模塊下啟用的是不同算法。我們打算非調(diào)試的模塊依然用 ninja 調(diào)用 gcc 這一套編譯成 so 庫,在需要修改的代碼處用 Visual Studio 編譯,而 Visual Studio 在調(diào)試時,一般會是 DEBUG 模塊,所以其它模塊(ninja)在編譯時,我們預(yù)先改成 DEBUG 模式。

修改 CMake 配置文件

修改根目錄下 CMakeLists.txt, USE_STATIC_LIBRARIES 為 FALSE。

option (USE_STATIC_LIBRARIES "Set to FALSE to use shared libraries" FALSE)

重新編譯

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug 
ninja -j 4

檢查編譯結(jié)果

如果在 build/dbms 下面出現(xiàn)了 libdbmsd.so 庫,說明編譯成功!

創(chuàng)建 VS 工程

目前來講,我們應(yīng)該有了全量代碼,很多模塊已經(jīng)編成了 so 庫,我們現(xiàn)在要做的就是,添加一個 main.cpp 文件,調(diào)用接口跑起來我們關(guān)注的部分就成功了。

創(chuàng)建工程

在根目錄下創(chuàng)建 ClickHouse.sln, ClickHouse.vcxproj 兩個工程,工程類型為 Linux 工程,然后打開 VS 工程。如下圖:

ClickHouse如何在windows下編譯調(diào)試
注意:我用的是顯示所有文件視圖,并添加了一個 main.cpp 文件, 代碼如下,也是 Parser 下的測試用例。

#include 

#include 
#include 
#include 


int main(int, char **)
try
{
    using namespace DB;

    std::string input =
        " SELECT 18446744073709551615, f(1), '\\\\', [a, b, c], (a, b, c), 1 + 2 * -3, a = b OR c > d.1 + 2 * -g[0] AND NOT e < f * (x + y)"
        " FROM default.hits"
        " WHERE CounterID = 101500 AND UniqID % 3 = 0"
        " GROUP BY UniqID"
        " HAVING SUM(Refresh) > 100"
        " ORDER BY Visits, PageViews"
        " LIMIT LENGTH('STRING OF 20 SYMBOLS') - 20 + 1000, 10.05 / 5.025 * 5"
        " INTO OUTFILE 'test.out'"
        " FORMAT TabSeparated";

    ParserQueryWithOutput parser;
    ASTPtr ast = parseQuery(parser, input.data(), input.data() + input.size(), "", 0);

    std::cout << "Success." << std::endl;
    formatAST(*ast, std::cerr);
    std::cout << std::endl;

    return 0;
}
catch (...)
{
    std::cerr << DB::getCurrentExceptionMessage(true) << "\n";
    return 1;
}

配置遠程編譯器

在 VS 的工具/選項下面配置一個遠程管理器,這是 VS 的一個特性,可以通過 ssh 調(diào)用遠端 gcc 和 gdb 用來編譯調(diào)試 linux 程序。

ClickHouse如何在windows下編譯調(diào)試

配置工程

配置頭文件

配置頭文件的列表,建議為編譯時看看頭文件在哪里,再添加進去,然后重復(fù)上面的動作直至全部添加為止。

配置鏈接庫


把編譯出來的庫文件添加進來。需要注意的是,這里的庫文件在存在于目標 linux 機器上。

調(diào)試運行

如果能如上圖斷點被命中,恭喜你,至此整個調(diào)試環(huán)境已經(jīng)可以跑起來了!

調(diào)試技巧

當想要了解某一個模塊時,可以利用 VS 把想調(diào)試的源文件添加進工程中(默認是全部排除的),這時該文件會被 VS 自動拷貝到遠端,并參與到工程編譯中,此時就可以對該文件打斷點調(diào)試了。

結(jié)束

盡情利用源碼來探究 ClickHouse 吧,源碼面前沒有秘密!

看完上述內(nèi)容,你們對ClickHouse如何在windows下編譯調(diào)試有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


新聞標題:ClickHouse如何在windows下編譯調(diào)試
文章分享:http://weahome.cn/article/goigoc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部