主要参考以下这篇文章:
PHPStudy+Xdebug2+PHPStorm 远程调试
一. 实验环境
Web 服务器端:
VMWare+Win10+PHPStudy+php7.3.4nts+Xdebug2
VMWare+Win10:PHPStudy 所在的机器 IP -- 192.168.124.136
PHP IDE 客户端:
物理机+Win10+PHPStorm
物理机:PHPStorm 所在的机器 IP -- 192.168.10.165
二. Web 服务器端配置
php7.3.4 自带 Xdebug 扩展
php7.3.4,自带 Xdebug 扩展。如下:
虽然自带 Xdebug,但默认情况下,是没有开启 Xdebug 的。
如下:php.ini 中的 [Xdebug] 节是空的。
开启 php7.3.4 自带的 Xdebug
勾上 xdebug 扩展,如下:
勾上 xdebug 扩展之后,需要重启 Nginx/Apache 才能生效,然后通过 phpinfo() 输出进行如下验证:
可见 Xdebug 扩展的版本是 2.7.2。
勾上 xdebug 扩展之后,php.ini 新增内容如下:
可以看到 xdebug.remote_enable=Off,即远程调试默认是关闭的。
Xdebug2 远程调试正确配置
修改 php.ini 配置,开启 Xdebug 远程调试,按照如下格式进行修改:
; 指定 Xdebug 扩展 dll 的绝对路径
zend_extension=xxx/xxx/php_xdebug-2.9.8-7.2-vc15-x86_64.dll
; 开启远程调试
xdebug.remote_enable=on
; 指定通信协议
xdebug.remote_handler=dbgp
; 指定 IDE 调试机的 IP
xdebug.remote_host=localhost
; 指定 IDE 调试机的端口
xdebug.remote_port=9000
; 指定通信口令
xdebug.idekey=PHPSTORM
php.ini 配置好之后的效果,如下:
修改完 php.ini 之后,需要重启 Nginx/Apache 才能生效。
三. IDE 客户端配置
IDE 客户端:PHPStorm。
远程 Xdebug 通信配置
注意:如果 PHPStorm 报错 9000 端口被占用,可以改成 9007,同时将服务器端的 php.ini 文件中的 9000 改成 9007。
这表示,PHPStorm 使用本地端口 9007,与远程 Xdebug 进行通信。
实际的通信过程应该是:PHPStorm(9007) <--> DBGp 代理客户端(9001) <--> Xdebug。
DBGp Proxy 配置
PHPStorm 使用 dbgp 协议与远程的 Xdebug 扩展进行通信。需要配置以下基本信息:
IDE key:123456,即通信的口令。
Host:192.168.10.165,即 DBGp 代理客户端,使用哪个 IP 与远程 Xdebug 通信。
Port:9001,即 DBGp 代理客户端,使用本地哪个端口通信。可以复用 9000。
远程 Servers 信息配置
新建一个远程服务:
随便填写一个服务的名称:Remote Server。Host 填 Xdebug 所在 IP。
Run/Debug Configurations 配置
在 PHPStorm 的右上角,点击【Add Configuration】,新建一个 Run/Debug Configurations 配置。
点击【+】,新建一个 PHP Web Page。
选择上面新建的 Server:
设置 Start URL:
远程调试方式一
点击【小电话】开始监听:
点击【bug虫】启动调试:
同时会在本地启动一个指定的浏览器:
Use Path Mappings
上面的调试中,可以看到如下报错:
设置 Path Mappings:
File/Directory --> IDE 本地路径
Absolute path on the server --> 服务器端路径
设置好路径映射之后,开始调试,如下所示:
可见,没有再报错了,而且可以看到调用栈。
PHP Web Page 调试方式缺点
每次都得填充一次 Start URL,才能调试新的请求。
远程调试方式二
浏览器扩展 Xdebug Helper
浏览器安装 Xdebug Helper 插件的好处是,方便在浏览器上随时启动调试,将调试信息发送给 IDE(如:PHPStorm,需要 PHPStorm 开启监听)。
安装浏览器插件 Xdebug Helper
打开 chrome 应用商店,需要科学上网:
在搜索框中搜索 “Xdebug”,如下:
点击进行安装,如下:
设置 Xdebug Helper
打开 Xdebug Helper 扩展的选项:
Xdebug Helper 设置的 IDE Key,必须得和 php.ini 中配置的 xdebug.idekey 保持一致。
浏览器访问页面触发调试
点击下面灰色的【Xdebug helper】:
弹出如下框:
点击上面的【Debug】,图标变成绿色的,表示 Xdebug Helper 开启了 Debug 模式。如下:
PHPStorm 开启监听
直接在 IDE 本地浏览器中访问 Web Page:
可以看到,PHPStorm 断下来了:
发现,新增了一个 localhost 的 server 配置:
这是在 Xdebug Helper 浏览器中第一次访问 web page 时,没有对应的 server 配置,PHPStorm 弹框请求新建的。
这种调试方式, Xdebug Helper 取代了 PHPStorm 中的 DBGp Proxy。
调试过程中的通信应该是:PHPStorm <--> Xdebug Helper(IDE 所在机器的浏览器) <--> Xdebug(Web 服务器端)。