ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd

git clone 源代码

  1. (非必要)首先fork ClickHouse官方github的库到自己账号中
  2. git clone代码
$ git clone --recursive [email protected]:ClickHouse/ClickHouse.git
# ...alternatively, you can use https://github.com/ClickHouse/ClickHouse.git as the repo URL.
# 如果fork了仓库,请将url替换为自己的仓库地址
# 若是中断可以使用以下命令
$ git fetch --recurse-submodules
$ git submodule update --init --recursive

安装必要的软件

这里以mac m1版本为例,前提是安装好homebrew和xcode,然后执行下面命令

$ brew update
$ brew install ccache cmake ninja llvm binutils

由于m1版本的homebrew安装软件路径与原intel版本不一样,如果我们在终端输入clang --version 如果出现的是xcode的clang地址,我们需要在环境变量里更换为llvm的clang。(linux同理配置)

$ vim ~/.zshrc
# 在下面添加以下配置,linux同理配置
export PATH=$(brew --prefix llvm)/bin:$PATH
export CC=$(brew --prefix llvm)/bin/clang
export CXX=$(brew --prefix llvm)/bin/clang++
# 执行使环境生效
$ source ~/.zshrc

配置VSCode

  1. 安装VSCode
  2. 下载插件
    1. clangd插件:插件下载完后会安装自己系统对应的clangd执行命令包,格式为clangd-linux/mac-xx.x.x.zip,如果下载太慢,请自行下载安装,clangd发行版下载,选择适合的版本,点击下载,解压文件,将bin下面的clangd程序放入/usr/bin下面(linux系统)。ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd_第1张图片
    2. CodeLLDB:插件完会自动下载对应的平台包,但是大概率会下载失败,会一直在acquiring。如下面第二个图。这里在github上自行下载对应包:CodeLLDB平台包下载,然后在vscode中选择从vsix安装,即可快速安装成功。
      ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd_第2张图片

在这里插入图片描述
ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd_第3张图片

配置文件

  1. 配置tasks.json
    我们打开ClickHouse文件夹,点击终端-配置任务
    ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd_第4张图片
    系统会自动生成一个.vscode文件夹和tasks.json文件。然后我们将tasks.json文件配置成下面内容即可
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "lldb-ck-cmake",
            // 参数说明: CMAKE_BUILD_TYPE=Debug开启调试模式,没有这个参数则生成的二进制文件无法调试。
            // CMAKE_EXPORT_COMPILE_COMMANDS=YES,clangd插件用来在当前文件夹下生成索引跳转文件compile_commands.json的,如果增加或者减少代码行数这个参数必须加上,否则调试时断点会错位
            // -DENABLE_CCACHE=0 如果报相应错了就加上这个,也可以安装compiler cache 然后设置为1,-DENABLE_CCACHE=1,加快后期编译
            "command": "cd ${workspaceFolder}/build; cmake ..  -DCMAKE_BUILD_TYPE=Debug  -DCMAKE_EXPORT_COMPILE_COMMANDS=YES"//最后参数会生成调试的compile_commands.json文件
        },
        // 修改文件后重新编译使用ninja即可,不需要重新cmake,可以将上面的task注释掉
        {
            "type": "shell",
            "label": "lldb-ck-ninja",
            "dependsOn": "lldb-ck-cmake",//如果上面cmake的task被注释了,该段也注释一下
            // -j N  表示并发执行的数量,一般配置自己系统的核心数即可,默认N=3
            // 如果要编译全部文件,则去除后面的clickhouse-server
            "command": "cd ${workspaceFolder}/build; ninja -j 8 clickhouse-server" 
        },
        // {
        //     "type": "shell",
        //     "label": "lldb-ck-gitpull",
        //     "command": "git pull && git submodule update --init --recursive"
        // }   
    ]
}
  1. 配置launch.json
    点击运行和调试–添加配置,会自动在.vscode文件夹下面生成对应的launch.json文件,配置成如下内容即可
    在这里插入图片描述
    ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd_第5张图片
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [   
        {
            "type": "lldb", //调试类型lldb,gdb,cppgdb等等,这里用lldb
            "request": "launch", //lldb的调试类型:launch就是正常的启停调试,attach是后台启动服务,然后lldb链接到进程上进行调试。
            "name": "lldb-ck-debug", //debug服务的名字,会展示在调试按钮旁
            "program": "${workspaceFolder}/build/programs/clickhouse-server", //调试时启动的程序,可以选择build/programs下生成二进制文件
            "args": [
                "--config-file",
                "${workspaceFolder}/programs/server/config.xml"
                // 也可以放在一起,看个人习惯
                // "--config-file=${workspaceFolder}/programs/server/config.xml"
            ], //调试时的参数
            "cwd": "${workspaceFolder}/build", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录 
            "preLaunchTask": "lldb-ck-ninja", //调试前对应的task项目label
            "console":"internalConsole",
            "postRunCommands": [
                "pro hand -p false -s false -n false SIGUSR1",
                "pro hand -p false -s false -n false SIGUSR2"
            ], //被打断时避免输入
            "initCommands":["settings set target.disable-aslr false"]
        }
    ]
}
  1. 配置CodeLLDB
    最后在.vscode文件夹下新建一个settings.json文件,设置CodeLLDB相关配置,方便在运行时使用lldb命令进行调试
{
	"lldb.consoleMode": "evaluate", //终端命令模式,可以调用lldb命令
	"lldb.launch.sourceLanguages": [
		"cpp",
		"c"
	],
	"lldb.launch.expressions": "native", // 原生表达式
	"lldb.displayFormat": "auto",
	"lldb.dereferencePointers": false,
	"lldb.showDisassembly": "auto"
}
当然你也可以点击设置按钮,选择CodeLLDB,然后在页面进行配置,当然效果是一样的

其他说明

  1. ClickHouse无法在Windows系统上运行,如果需要在win系统运行,请安装WSL进行远程调试
  2. 网速慢容易下载不下来特别是icu等子模块,这里需要自己想办法了(科学上网等等),尽量选择百兆以上的网络
  3. 如果出现下面问题,点击链接进入,更换下面第二张图所展示的
    ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd_第6张图片在这里插入图片描述
  4. (重要):如果出现了异常的SIGUSR1和SIGUSR2信号打断调试,可以运行在vscode中的debug框中执行下面命令
    ClickHouse系列--1.ck调试最佳实践--VSCode+CodeLLDB+Clangd_第7张图片
# debugger为lldb时,且命令模式为evaluate
/cmd pro hand -p false -s false -n false SIGUSR1
/cmd pro hand -p false -s false -n false SIGUSR2
# 或者
`pro hand -p false -s false -n false SIGUSR1
`pro hand -p false -s false -n false SIGUSR2
  1. ccache安装
    如果您使用的是Ubuntu或Debian,您可以通过以下命令安装ccache:
    sudo apt-get install ccache
    如果您使用的是CentOS或RedHat,您可以通过以下命令安装ccache:
    sudo yum install ccache

增加ccache缓存的大小可以增加命中率。可以使用以下命令来设置最大缓存大小:
export CCACHE_MAXSIZE=10G或者用这个ccache -M 25G命令

常见命令:
ccache -s:显示ccache缓存的使用情况
ccache -z:清空ccache缓存

具体说明
cache directory: ccache缓存所在的目录;
cache hit rate:缓存命中率,也就是已经存在于缓存中并已被命中的对象文件所占百分比;
cache miss rate:缓存未命中率,也就是需要重新编译的对象文件所占百分比;
cache hit (direct):实际存在于缓存中并被直接读取的对象文件数量;
cache hit (preprocessed):实际存在于缓存中并被预处理后读取的对象文件数量;
cache miss:没有命中缓存并需要重新编译的对象文件数量;
cache total:已经从编译器得到的对象文件数量;
preprocessor error:预处理失败的次数。

你可能感兴趣的:(大数据,vscode,clickhouse)