MAC搭建PHP调试环境
mac 不推荐使用这种方式,更好的是使用docker的方式来搭建调试环境。
使用Docker搭建php调试环境,支持gdb, xdebug, vld等工具调试php。
1. 源码安装
1.1. 获取源码
git clone https://github.com/php/php-src.git
cd php-src
切换到想构建的分支:
- PHP 5.3: git checkout PHP-5.3
- PHP 5.4: git checkout PHP-5.4
- PHP 5.5: git checkout PHP-5.5
- PHP 5.6: git checkout PHP-5.6
- PHP 7.0: git checkout PHP-7.0
- PHP HEAD: git checkout master
# 生成编译所需的 configure 文件
./buildconf
1.2. configure and make
./configure --disable-all --enable-debug --prefix=/Users/js/php/usr
1.
checking for bison version... invalid
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers
2.
/php-src/Zend/zend_language_parser.y:50.1-5: invalid directive: `%code’
/php-src/Zend/zend_language_parser.y:50.7-14: syntax error, unexpected identifier
make: *** [/freemouse/php-src/Zend/zend_language_parser.c] 错误 1
Refer: https://bugs.php.net/bug.php?id=71343
brew install bison27
YACC=/usr/local/opt/bison@2.7/bin/bison ./configure --disable-all --enable-debug --prefix=/Users/js/php/usr
make && make install
1.3. 配置编译的php作为系统默认
- vim ~/.zshrc
# choose compile php as default
export PATH="/Users/js/php/usr/bin:$PATH"
2. vld(Vulcan Logic Dumper)扩展
2.1. 安装
Ref:
git clone https://github.com/derickr/vld.git
cd vld
phpize
./configure
make && make install
vim php.ini
[vld]
extension=vld.so
2.2. 使用 VLD 查看 OPCODE
php -dvld.active=1 path/xxx.php
2.3. vld 参数列表
-dvld.active: 是否在执行PHP时激活VLD挂钩
1) 默认为0: 表示禁用
2) 使用-dvld.active=1启用
-dvld.verbosity: 是否显示更详细的信息
1) 默认为1
2) 其值可以为0,1,2,3 其实比0小的也可以,只是效果和0一样,比如0.1之类,但是负数除外,负数和效果和3的效果一样 比3大的值也是可以的,只是效果和3一样,3代表最详细
-dvld.execute: 是否执行这段PHP脚本
1) 默认值为1,表示执行
2) 使用-dvld.execute=0,表示只显示中间代码,不执行生成的中间代码
-dvld.skip_prepend: 是否跳过php.ini配置文件中auto_prepend_file指定的文件
1) 默认为0,即不跳过包含的文件,显示这些包含的文件中的代码所生成的中间代码。此参数生效有一个前提条件:-dvld.execute=0
-dvld.format: 是否以自定义的格式显示
1) 默认为0,表示否
2) 使用-dvld.format=1,表示以自己定义的格式显示。这里自定义的格式输出是以-dvld.col_sep指定的参数间隔
-dvld.col_sep: 在-dvld.format参数启用时此函数才会有效,默认为 "t"
-dvld.save_dir: 指定文件输出的路径,默认路径为/tmp
-dvld.save_paths: 控制是否输出文件,默认为0,表示不输出文件
-dvld.dump_paths: 控制输出的内容,现在只有0和1两种情况,默认为1,输出内容
3. gdb调试
3.1. 安装
brew install gdb
由于macos 10.12.4的安全更新,使用gdb会报错: During startup program terminated with signal ?, Unknown signal.
.
解决:
brew info gdb
:
On 10.12 (Sierra) or later with SIP, you need to run this:
echo "set startup-with-shell off" >> ~/.gdbinit
sudo -E gdb --args /Users/js/php/usr/bin/php test/index.php