feistiny / php-src

PHP 的 C 源码学习之路

Home Page:https://www.php.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

原来的 readme

学习 PHP 源码加中文注释

原始分支:PHP-7.0.12

当前分支:COMMENT-PHP-7.0.12

之所以用 PHP-7.0.12 分支, 因为是跟着《PHP7 内核剖析》这本书学习的,这样可以更快的对 PHP 的源码整体上有个大概了解,一旦入门了,后续其他的细节问题就可以自己分析了。

如果您需要联系到我,可以给我发邮件

学习工具

IDE 用 Clion

Clion,jetbrains 系列用熟了,学习其他语言很方便,很多实用的功能,后续会把常用的功能单独详细的列出来,方便其他小伙伴能直接上手。

因为 Clion 是基于 Cmake 来管理项目的,用 Clion 可以方便的生成 CMakeLists.txt,虽然不能直接通过 cmake 来编译项目,因为编译 php 源码有很多的依赖关系,只是通过 CMakeLists.txtadd_executable来让 IDE 知道哪些文件是当前项目的,从而建立文件索引,以使用 IDE 的查找引用和跳转定义等功能。

断点调试工具 gdb

由于编译过程比较复杂,如果用 Clion 的 remote gdb target 或者 gdb remote debug 等功能需要参与到编译过程,而且要保证本地的源码文件和编译出来的符号表对应,比较折腾,不如直接用命令行的 gdb,而且如果本地机是 mac 或 windows,调试起来也不方便,直接上 linux 上搞就完了。

如果是比较简单的单个或几个文件的断点调试可以使用 Clion 自带的 lldb,本地直接断点就行了。

开始

准备看源码

由于以下文件都是根据本机环境生成的,就不添加到仓库了,需要自己生成。

本地生成 CmakeLists.txt

Clion 执行 Action: Create CMakeLists.txt ,默认选项就行。

本地生成 main/php_config.h

因为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

可以看源码了

About

PHP 的 C 源码学习之路

https://www.php.net

License:Other


Languages

Language:C 67.7%Language:PHP 30.4%Language:M4 0.5%Language:C++ 0.4%Language:Shell 0.4%Language:JavaScript 0.2%Language:Lex 0.1%Language:Makefile 0.1%Language:Yacc 0.1%Language:Roff 0.0%Language:Objective-C 0.0%Language:HTML 0.0%Language:Awk 0.0%Language:GDB 0.0%Language:Perl 0.0%Language:XSLT 0.0%Language:DTrace 0.0%Language:Batchfile 0.0%Language:GAP 0.0%