跳转至

背景

为了更好的阅读OceanBase的代码,我们建议使用一个可以方便的索引OceanBase代码的IDE。在Windows下,我们推荐使用Source Insight,在Mac或者Linux下,我们推荐使用VSCode + ccls来阅读OceanBase的代码。由于Source Insight使用起来非常简单,所以本文档不介绍如何使用Source Insight

本篇文档介绍如何设置 VSCode + ccls,这个组合非常适合阅读OceanBase的代码。ccls 是基于 cquery 的,cquery是一个C/C++/Objective-C的 LSP 之一(简单来说,LSP用于提供编程语言特定的功能,如代码补全、语法高亮、警告和错误标记,以及重构例程)。

OceanBase 的代码量非常大,而且OceanBase不能在Mac或者Windows下编译,所以我们建议在远程服务器上下载代码,然后在本地使用VSCode访问远程服务器上的代码。

在远程服务器上配置 ccls

注意

下面的 /path/to 只是一个路径示例,请替换成你的实际路径。

介绍

在 C/C++ LSP 领域,比较有名的工具有 clangd 和 ccls。这里我们推荐 ccls,因为:

  1. ccls 构建索引的速度比 clangd 慢,但是构建完成后,ccls 访问索引的速度比 clangd 快。
  2. clangd 不支持 unity 编译,而 OceanBase 是通过 unity 编译的,clangd 无法通过 compile_commands.json 构建索引。

ccls 安装

在 CentOS 上安装 ccls

注意:如果没有权限执行 yum,请使用 sudo yum ...

yum install epel-release
yum install snapd # On centos8: yum install snapd --nobest
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
snap install ccls --classic

然后把下面的命令添加到你的环境变量文件中,例如 '~/.bashrc' 或者 '~/.bash_profile'

export PATH=/var/lib/snapd/snap/bin:$PATH

刷新一下环境变量,例如:

source ~/.bashrc   # or
source ~/.bash_profile

在 Ubuntu 上安装 ccls

apt-get -y install ccls

注意:如果没有权限执行 apt-get,请使用 sudo apt-get ...

检查安装是否成功

运行这个命令判断是否安装成功。

ccls --version

VSCode 配置

远程插件

在远程主机上下载源代码后,可以很容易地在远程主机上设置调试环境。同时,由于远程主机更强大,应用程序可以更快地运行。即使网络出现问题,用户也可以很容易地访问远程主机上的源代码,只需在重新连接远程服务器后等待重新加载即可。

安装

在VSCode的扩展商店中下载并安装Remote插件。

remote plugin

使用

注意:确保本地机器和远程机器之间的连接正常。

安装插件后,VSCode左下角会出现一个图标。

remote plugin usage

点击图标,选择 Connect to Host,或者按快捷键 ctrl+shift+p,选择 Remote-SSH:Connect to Host

connec to remote

输入远程服务器的用户名@IP地址,然后输入密码,VSCode会连接到远程服务器,准备打开远程机器的文件或目录。

input password

输入密码之后,VSCode会连接到远程服务器,准备打开远程机器的文件或目录。

如果需要指定端口,请选择 Add New SSH Host,然后输入ssh命令,然后选择一个配置文件来存储ssh配置。

ssh port

ssh config file

接着,配置好的机器可以在 Connect to Host 中找到。

每次都需要输入密码,如果想跳过这个步骤,可以配置SSH免密登录。

C/C++ 插件

不推荐使用C/C++插件,因为无法为OceanBase提供良好的索引功能,并且与ccls插件不兼容。

如果有一些简单的场景,可以在VSCode的扩展商店中下载并安装C/C++插件。

cpp plugins

C/C++插件可以自动完成代码和语法高亮,但是这个插件无法为OceanBase构建索引,很难跳转到OceanBase的符号。

ccls 插件

安装 ccls 插件

ccls plugin

要使用 ccls,就建议卸载 C/C++ 插件。

配置 ccls 插件

  1. 插件设置按钮然后选择 Extension Settings

ccls plugin settings

  1. 设置 ccls.index.threads。ccls 默认使用系统80%的CPU核心作为默认的并行度。我们可以在VSCode的配置页面中搜索 threads 并设置如下数字。

默认情况下,OceanBase使用unity编译,比普通情况下消耗更多的内存。如果并行度太高,例如8核16G的系统,系统可能会挂起。

ccls threads config

使用

  1. 使用 git 下载源码 https://github.com/oceanbase/oceanbase
  2. 生成 compile_commands.json
bash build.sh ccls --init

可以在 OceanBase 源码下看到 compile_commands.json 文件。

执行完上面的步骤后,需要重启 VSCode,然后在 VSCode 底部可以看到构建索引的过程:

ccls-indexing

索引构建完成后,可以很容易地找到任何打开文件的函数引用和类成员,如下面的示例:

ccls index example

一些快捷键设置

ccls shortkey

ccls shortkey