OceanBase源码阅读工具-Eclipse篇

背景

工欲善其事,必先利其器,OceanBase 社区版代码量较大,在学习 OceanBase 代码时,需要有一款较好的源码阅读工具,来帮助大家更好地理解代码的执行流程、接口的层次关系等等。根据我在 OceanBase 6 年来的开发和阅读代码体验,一款较好的源代码阅读工具需要如下的一些功能:

  • 按照符号搜索函数名、类名等
  • 按照文本搜索文件名
  • 文件内符号查找
  • 按照文本搜索项目空间的字符串
  • 查看类的继承关系
  • 查看函数调用栈
  • 查看某个变量的调用栈
  • 跳转到某个函数的实现

上面的功能是在平时的开发和源码阅读过程中使用较多的功能,根据我目前的使用经验,有两款工具基本符合上面的条件,第一款是 Eclipse C/C++版本,第二款是 CCLS,可以在 vim 等编辑器中使用。本文将主要介绍 Eclipse 下的这些功能。

使用 Eclipse

下载

可以从 Eclipse 官网下载到 Eclipse C/C++,下载完成后,打开里面的 Eclipse 应用即可使用

导入 OceanBase 代码

从 Eclipse 的菜单栏 New->Makefile Project with Existing Code,导入 OceanBase 的源代码。项目生成后,Eclipse 会自动为代码构建索引,在普通的个人电脑上,索引的时间大约半个小时左右。

使用 Eclipse 阅读 OceanBase 代码

按照符号搜索函数名、类名等

在开发和源码阅读中,有时候我们记得某个函数或类的名字,但忘记所在代码文件了,此时,按照符号搜索函数名、类名功能就非常方便了。在 Eclipse 中,通过 Navigate->Open Element 使用该功能。

按照文本搜索文件名

有时候,我们知道某个功能的代码实现在某个文件内,但忘记了具体的函数名了,此时,我们可以结合按照文本搜索文件名,以及在文件内符号查找来找到对应的代码。在 Eclipse 中,通过 Navigate->Open Resource 使用该功能。

文件内符号查找

当我们定位到具体的代码文件后,如果需要在文件中查找对应的类、符号以及类内成员名等,可以使用该功能。在 Eclipse 中,打开某个代码文件后,通过右击鼠标->Quick Outline,在对应的搜索框里输入相应的符号即可查找。

按照文本搜索项目空间的字符串

有时候我们需要按照文本搜索匹配的代码,例如,在 OceanBase 中,内存分配是按照模块命名的,如果我们想查找使用某个模块名分配内存的代码,那么我们可以搜索该模块名的字符串来匹配代码。在 Eclipse 中,可以通过 Search->File 打开对应的搜索框,在里面输入想要查找的字符串。

查看类的继承关系

在 C++代码中,可能会使用继承来组织代码,有时候需要查看类的继承关系来看不同场景下的实现。在 Eclipse 中,通过光标选中类名,然后调用 Navigate->Open Type Hierarchy 来查看类的继承关系。

查看函数调用栈

在排查问题时,我们可能会碰到某个函数运行处理的结果不符合预期的情况,此时,我们可能需要通过函数调用栈来跟踪函数执行路径,来判断哪条路径可能出问题了。在 Eclipse 中,光标移动到函数名上,Navigate->Open Call Hierarachy。根据我在 MAC 开发环境的使用经验,Eclipse 能够快速又较为准确地对 OceanBase 这样体量代码的函数查看调用栈,其他的 IDE 暂时还不能够同时满足快速和准确。

查看某个变量的调用栈

有时候需要理解某个类内成员变量的作用,此时要查看其所有使用的地方。在 Eclipse 中,跟查看函数调用栈使用方式一样,可以查看某个变量的调用栈。

跳转到某个函数的实现

在我们学习某个功能的实现时,通常需要自上而下跟踪代码路径下的实现,因此,需要有跳转到某个函数实现的能力。在 Eclipse 中,将光标移动到调用的函数上,然后通过 Navigate->Open Declaration 跟踪到具体的实现。有时候跟踪到具体实现后,又希望回到之前的代码处继续跟踪下面的流程,此时可以通过 Navigate->Back 来回到之前代码处。
本文提到的代码查找功能同样适用于任何其他 C/C++项目,如果有学习其他 C/C++代码的需求,也可以作为参考。