PHP 7 源码阅读工具介绍

在研究 PHP 7 源码之前,我们首先要掌握学习源码的方法论。首先是阅读工具,本章会介绍 Windows 下的 Source Insight、Mac 下的 Understand 以及 Linux 下的 Vim+Ctags,方便读者根据自己的操作系统选择不同的阅读工具。

Source Insight

Windows 环境下有一款功能强大的 IDE: Source Insight,内置了 C++ 代码分析功能;同时还能自动维护项目内的符号数据库,使用非常方便。安装过程这里不再赘述,下边来看看具体的使用过程。

安装完成以后,打开后的界面如图1-2所示。

image 2024 06 06 18 35 56 945
Figure 1. 图1-2 Source Insight示意图

首先来创建一个工程,点击 Project,选择 New Project 命令,在弹出的窗口中输入工程名称和工程存档路径,如图1-3所示。

image 2024 06 06 18 36 30 832
Figure 2. 图1-3 创建一个工程

填写好后,点击 OK 按钮,在接下来的窗口中选择代码的目录,如图1-4所示。

image 2024 06 06 18 37 06 776
Figure 3. 图1-4 选择代码的目录

选择完毕后继续点击 OK 按钮,在接下来的窗口右侧点击 Add All 按钮,在选择后弹出的窗口中勾选 recursively add lower sub-directories,点击 OK 按钮,IDE 开始扫描目录并添加文件,扫描完成后会在下边的窗口中显示添加到工程的文件。此时,点击 Close 按钮完成工程创建,如图1-5所示。

image 2024 06 06 18 38 04 351
Figure 4. 图1-5 完成工程创建

至此,工程就创建完了。点击工具栏上的 Project Window 按钮调出目录树就可以阅读代码了。如图1-6所示,可以看到左侧是代码中的符号列表,中间是编辑器,右侧是目录树。

image 2024 06 06 18 38 56 313
Figure 5. 图1-6 阅读代码

Source Insight 可以非常方便地显示函数之间的调用关系,点击 Views→Relation Window 命令,可以看到界面右侧出现一个新的窗口,在编辑窗口点击某一个函数,即可在调用关系窗口中显示函数的调用关系,如图1-7所示。

image 2024 06 06 18 39 38 246
Figure 6. 图1-7 显示函数的调用关系

关于 Source Insight 的介绍就先到这里。读者可以自己安装体验一下其强大的功能。下面介绍下 Mac 环境下的阅读工具 Understand。

Understand

Understand 是 Mac 平台下一款功能强大的 IDE,具备代码依赖、图形化等实用功能。安装过程这里也不再赘述了,下边来看看具体的使用过程。'

Understand 打开后如图1-8所示。

image 2024 06 06 18 40 39 461
Figure 7. 图1-8 Understand示意图

点击 New Project 来创建一个工程,在弹出的窗口中输入工程名称和工程存档路径,然后点击 Next 按钮,如图1-9所示。

image 2024 06 06 18 41 18 424
Figure 8. 图1-9 创建一个工程

接下来选择项目代码的语言,这里选择 C++ 和 Web 即可。C++后边的选项表示第一次代码分析的模式,然后继续下一步,如图1-10所示。

image 2024 06 06 18 42 35 687
Figure 9. 图1-10 选择项目代码语言

这一步是确定如何导入文件和设置,如果读者使用 Visual Studio 或者 CMake,那么选择对应的选项即可。这里选择第一个 Add source files and directories manually 单选按钮,然后继续下一步,如图1-11所示。

image 2024 06 06 18 43 17 678
Figure 10. 图1-11 确定如何导入文件和设置

接下来选择要导入的文件目录,点击 Add a Drirectory 选项卡,在弹出来的窗口中选择目录和文件类型,可以选择要包含的多种文件类型到项目中,记得勾选 Include subdirectories 复选框,然后继续下一步,如图1-12所示。

image 2024 06 06 18 44 02 856
Figure 11. 图1-12 选择要导入的文件目录

之后一个项目就创建完了。Understand 会自动找到对应目录下的文件开始进行代码分析,如图1-13所示。

image 2024 06 06 18 46 43 983
Figure 12. 图1-13 代码分析

Unserstand 也可以为代码分析生成其调用关系图,如图1-14所示。

image 2024 06 06 18 47 12 919
Figure 13. 图1-14 生成调用关系

在某个函数上右击,选择 Graphical Views→Declaration 命令,可以看到该函数的调用关系,如图1-15所示。

image 2024 06 06 18 47 53 754
Figure 14. 图1-15 查看函数的调用关系

Understand 还有很多非常有用的功能,在这里就不再一一列举了,大家可以自己实践一下。接着来介绍一下 Linux 下强大的代码阅读工具 Vim

Vim + Ctags

Linux 环境下可以使用 Vim+Ctags 来阅读代码。CtagsVim 下阅读代码的一个辅助工具,可以生成函数、类、结构体、宏等语法结构的索引文件,它的使用也非常简单,如下:

$ yum install ctags  // Ubuntu下使用apt-get install ctags
$ cd /home/vagrant/php7/book/php-7.1.0/
$ ctags -R *

这一步,表示给当前目录下所有的文件(包含子文件)生成索引文件,执行完后可以看到当前目录下生成了一个 tags 文件:

$ ll tags
-rw-rw-r--1 vagrant vagrant 7.2M 11月 26 04:17 tags
$ pwd
/home/vagrant/php7/book/php-7.1.0/

打开 Vim 的配置文件将 tags 文件的目录添加进去:

$ vim ~/.vimrc
set tags=/home/vagrant/php7/book/php-7.1.0/tags

到这一步就完成了简单的配置。当使用 Vim 打开该项目的时候,Vim 会自动加载其索引文件,使用 Ctrl+]Ctrl+O 快捷键就可以方便地跳转和跳回了。

Vim + Ctags 还有很多强大的功能,限于篇幅就不再一一列举了。