今天就跟大家聊聊有关ClickHouse如何在windows下编译调试,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。大数据时代,每一条数据都携带着一种信息,各种优传感器,网关,IOT 设备无时无刻都在用日志输出着自己的运行信息。这些信息被存储后经免费云主机域名过多维度计算就组成了我们现在的大数据环境。为了便于计算,出现了非常多优秀的数据库及组件,他们都在自己擅长的领域解决着各种场景的问题,其中就有一款在 OLAP 场景下,以惊艳的性能指标横空出世的数据库, 这就是 ClickHouse 。
它是保守的俄罗斯一家商业公司 Yandex (类似中国的百度)在 2016 年开源的。今天我并不打算讲解 ClickHouse 有什么特性,因为当你首先对这款数据库感兴趣时,有志者肯定第一想法是,“Talk is cheap, Show me the code。” 但对于大型工程,代码下载是容易的,一些框架复杂,动态调用时才能清晰知道流程的项目,编译出来调试一次,会对逻辑有更深的理解,也会降低阅读难度,今天要讲的便是如何编译调试,尤其是在 windows 下利用强大的 Visual Studio 来调试 ClickHouse。我先预设大家的水平都会知道一些基础编译信息,这里只做要求:WSL 或者 CentOS 7, 我习惯于在 windows 下减少虚拟机消耗,这两者环境区别不大;GCC 7.4.0,ClickHouse 大量运用了 C++17 语法,要求编译器版本为 7.4;cmake 3.14.5, 这个下载包直接解压,建立软链即可ninja 1.9.0, 直接下载对应包,解压即可Visual Studio, 我用的是 VS2019尽量在 linux 环境下(包括 WSL)使用 git 下载,应该 ClickHouse 引用了很多外部开源工程,在拉取过程中有些源文件是会建立软链接的,如果在 windows 下,这些软链接会建立失败,导致后期编译时错误。也不用直接在 git 上下载源码包,这样外部引用的开源工程都不会被拉取,造成编译不过。如果出现上面结果,那么你已经成功了。
但,还没有达到我们的目的,我们是需要在 windows 下调试起来。由于默认情况下,ClickHouse 是编译成静态模块,打包成一个大程序。为了便于后期更改代码调试时减少链接时间,我们修改为编译为动态链接库的形式,这样也可以逐模块探索。还有,默认情况下,ClickHouse 是非 DEBUG 模式的,由于在内存管理这块,在 DEBUG 和非 DEBUG 模块下启用的是不同算法。我们打算非调试的模块依然用 ninja 调用 gcc 这一套编译成 so 库,在需要修改的代码处用 Visual Studio 编译,而 Visual Studio 在调试时,一般会是 DEBUG 模块,所以其它模块(ninja)在编译时,我们预先改成 DEBUG 模式。修改根目录下 CMakeLists.txt, USE_STATIC_LIBRARIES 为 FALSE。如果在 build/dbms 下面出现了 libdbmsd.so 库,说明编译成功!目前来讲,我们应该有了全量代码,很多模块已经编成了 so 库,我们现在要做的就是,添加一个 main.cpp 文件,调用接口跑起来我们关注的部分就成功了。在根目录下创建 ClickHouse.sln, ClickHouse.vcxproj 两个工程,工程类型为 Linux 工程,然后打开 VS 工程。如下图:
注意:我用的是显示所有文件视图,并添加了一个 main.cpp 文件, 代码如下,也是 Parser 下的测试用例。在 VS 的工具/选项下面配置一个远程管理器,这是 VS 的一个特性,可以通过 ssh 调用远端 gcc 和 gdb 用来编译调试 linux 程序。配置头文件的列表,建议为编译时看看头文件在哪里,再添加进去,然后重复上面的动作直至全部添加为止。
把编译出来的库文件添加进来。需要注意的是,这里的库文件在存在于目标 linux 机器上。如果能如上图断点被命中,恭喜你,至此整个调试环境已经可以跑起来了!当想要了解某一个模块时,可以利用 VS 把想调试的源文件添加进工程中(默认是全部排除的),这时该文件会被 VS 自动拷贝到远端,并参与到工程编译中,此时就可以对该文件打断点调试了。尽情利用源码来探究 ClickHouse 吧,源码面前没有秘密!看完上述内容,你们对ClickHouse如何在windows下编译调试有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注云编程开发博客行业资讯频道,感谢大家的支持。
相关推荐: 怎么实现Linux内核CVE-2017-11176漏洞分析与复现
今天就跟大家聊聊有关怎么实现Linux内核CVE-2017-11176漏洞分析与复现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Linux内核中的POSIX消息队列实现中存在一个UAF漏洞CVE-20…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。