http://www.vicenteforever/2013/12/php-src-breakpoint/


通过断点调试php文件,从而知道其在php内部执行流程。

一、下载php源码(5.5.6)

http://www.php/get/php-5.5.6.tar.gz/from/a/mirror

二、编译

下载源码后,解压缩,到php-src目录下.

为了尽快得到可以测试的环境,我们仅编译一个最精简的PHP。通过执行 ./configure –disable-all来进行配置。 以后如果需要其他功能可以重新编译。如果configure命令出现错误,可能是缺少PHP所依赖的库,各个系统的环境可能不一样。 出现错误可根据出错信息上网搜索。 直到完成configure。configure完成后我们就可以开始编译了。

帮助
1 2 ./configure --disable-all make

在*nix下编译过程序的读者应该都熟悉经典的configure make,make install吧。执行make之后是否需要make install就取决于你了。 如果install的话最好在configure的时候是用prefix参数指定安装目录, 不建议安装到系统目录, 避免和系统原有的PHP版本冲突。 在make 完以后,在sapi/cli目录里就已经有了php的可以执行文件. 执行一下命令

帮助
1 ./sapi/cli/php -v

三、查看程序中的符号表

帮助
1 2 3 4 <?php $a = 1; $b = 2; echo $a + $b ;

上面是我们的测试代码,我们需要查看echo在php源码中是如何运行的。nm命令是用来查看指定程序中的符号表相关内容的工具。也可以查看出在php源码中的具体使用方法。

帮助
1 nm sapi/cli/php|grep echo

四、gdb调试

帮助
1 2 3 gdb sapi/cli/php B zend_do_echo //设置断点 run / var /test/test.php

首先,调试sapi/cli/php文件,进入gdb调试模式
设置断点zend_do_echo
运行文件

会显示zend_do_echo在这个执行流程中,具体在哪个文件中。

输入bt命令,可以完整的查看出test.php文件中echo命令在cli模式下执行过程。


更多推荐

php源码断点调试