文章目录
坑说在先
xdebug:v2.7.2 不能和 phpStrom 2018.2.3 调试PHP
亲测xdebug:v2.6.0可以和phpStrom 2018.2.3 调式成功。
(未验证)不成熟的推测: xdebug:v2.7.* 做了一些改动,和老版本有所不同,不能和一些版本教较老的编辑器联调。
问题现象
- 本地调式模式 、远程调试、gdbp proxy代理模式都不能断点调式php代码
- cli,web方式php不能调起phpstrom的xdebug
- phpstrom xdebug等待中, web页面有可能504超时民可能正常获得返回结果
排查过程
本地模式xdebug
此种方式要求php-fpm可以连接到本地端口(因为编辑器一定是使用本地端口)。
php-fpm可以是本机启动的,也可以在本地的docker容器中
代理模式xdebug
DBGP代理工作过程
安装DBGP代理
git clone git@github.com:gkralik/dbgpproxy.git
以debug模式启动DBGP代理
./dbgpproxy -i 0.0.0.0:9011 -d 0.0.0.0:9022 -l DEBUG
-i 接受编辑器的注册
-d 接收php-fpm的xdebug链接
调试步骤
- 下载启动dbgpproxy
- 配置phpStrom php>Debug>DBGp Proxy
- 注册编辑器到dbgpproxy代理
phpStrom Tools>DBGp Proxy>Register IDE
- web 或者 cli 模式触发php xdebug
确定端口是正常能通的
假如9022 是编辑器配置的xdebug端口
tcpdump -i lo0 port 9022
或者 wireshark tcp.port == 9022
DBGP代理debug级别的日志能更直观的体现出来
安装指定版本的php extension扩展包
卸载原xdebug
pecl uninstall xdebug
安装指定版本xdebug
pecl install channel://pecl.php.net/xdebug-2.6.0
pecl install channel://pecl.php.net/{extension-name}-{tag} 安装扩展包的指版本
排查工具
tcpdump 命令行抓包工具 或者 wireshark GUI抓包工具, 不熟悉抓包的更适合用这个
dbgpProxy DBGP代理:https://github.com/gkralik/dbgpproxy
此dbgpProxy需要python3,本地同时存在phthon2和phthon3,编辑脚本以phthon3执行
修改
#!/usr/bin/env python
为
#!/usr/local/Cellar/python/3.7.4/bin/python3