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
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模式下执行过程。
发布评论