原始分支:PHP-7.0.12
当前分支:COMMENT-PHP-7.0.12
之所以用 PHP-7.0.12 分支, 因为是跟着《PHP7 内核剖析》这本书学习的,这样可以更快的对 PHP 的源码整体上有个大概了解,一旦入门了,后续其他的细节问题就可以自己分析了。
如果您需要联系到我,可以给我发邮件。
Clion,jetbrains 系列用熟了,学习其他语言很方便,很多实用的功能,后续会把常用的功能单独详细的列出来,方便其他小伙伴能直接上手。
因为 Clion 是基于 Cmake 来管理项目的,用 Clion 可以方便的生成 CMakeLists.txt
,虽然不能直接通过 cmake
来编译项目,因为编译 php 源码有很多的依赖关系,只是通过 CMakeLists.txt
的 add_executable
来让 IDE 知道哪些文件是当前项目的,从而建立文件索引,以使用 IDE 的查找引用和跳转定义等功能。
由于编译过程比较复杂,如果用 Clion 的 remote gdb target 或者 gdb remote debug 等功能需要参与到编译过程,而且要保证本地的源码文件和编译出来的符号表对应,比较折腾,不如直接用命令行的 gdb,而且如果本地机是 mac 或 windows,调试起来也不方便,直接上 linux 上搞就完了。
如果是比较简单的单个或几个文件的断点调试可以使用 Clion 自带的 lldb,本地直接断点就行了。
由于以下文件都是根据本机环境生成的,就不添加到仓库了,需要自己生成。
Clion 执行 Action: Create CMakeLists.txt
,默认选项就行。
因为php_config.h
里有很多根据本机环境生成的宏,还有很多 include 了系统的头文件,如果不生成,找不到头文件就无法跳转。
# 本地生成的 ./configure
./buildconf --force
# 什么扩展都不用带
./configure --without-iconv
# 最后输出
config.status: creating php7.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands