通过 Xdebug 代理进行多用户调试
当您启动调试会话时,Xdebug 扩展连接到运行 PhpStorm 的 IP 地址,指定为xdebug.remote_host
(对于 Xdebug 2)或xdebug.client_host
(对于 Xdebug 3)值。PhpStorm 接受此连接并可以通过它与 Xdebug 通信。Xdebug 仅支持连接单个 IP 地址,出于安全原因,不会自动连接回运行浏览器的 IP 地址。为了在多用户环境中调试 PHP 应用程序,Xdebug 提供了一个所谓的DBGp 代理。
使用代理时,PHP Xdebug 扩展不再直接连接到 PhpStorm,而是连接到 DBGp 代理服务器。团队中的所有开发人员依次连接到该代理。每个开发人员都有一个在此代理上运行的单独调试会话,这使得在同一台服务器上对相同代码进行多用户调试成为可能。
通过 Xdebug 代理 (DBGp) 服务器配置多用户调试
下载并安装 DBGp 代理
为了能够启动调试会话,您需要在服务器上运行 DBGp 代理,Web 服务器本身以及所有开发人员机器都可以访问该代理。我们可以将代理安装在 Web 服务器上、同一网络中的机器上,或者通过 SSH 隧道访问的机器上。
在DBGp 代理工具下载页面上为您的平台下载dbgpProxy可执行文件。
在 Web 服务器或可以与 Web 服务器和所有开发人员机器进行通信的机器上启动 DBGp 代理。DBGp 代理可执行文件接受两个主要参数:
-i
:用于侦听 IDE(客户端)连接的主机和端口-s
: 侦听调试器引擎(服务器)连接的主机和端口
有关详细信息,请参阅DBGp 代理工具文档。
在下面的示例中,我们启动了一个代理,它在环回地址127.0.0.1和端口9001上侦听调试器连接,并在机器 IP 地址和端口9000上侦听开发人员。
dbgpProxy.exe -i 192.168.1.11:9000 -s 127.0.0.1:9001./dbgpProxy-macos -i 192.168.1.11:9000 -s 127.0.0.1:9001./dbgpProxy -i 192.168.1.11:9000 -s 127.0.0.1:9001DBGp 代理将在启动时确认这些设置:
确保在 Web 服务器上安装并配置了 Xdebug
在编辑器中打开活动的php.ini文件:
在“设置/首选项”对话框 ( Ctrl+Alt+S) 中,单击PHP。
在打开的PHP页面上,单击CLI Interpreter字段旁边的。
在打开的CLI 解释器对话框中,配置文件只读字段显示活动php.ini文件的路径。单击在编辑器中打开。
确保至少指定了以下设置:
[xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.mode=debug xdebug.client_host=127.0.0.1 xdebug.client_port="<Xdebug 连接的端口(默认为9003)>"[xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.remote_enable=1 xdebug.remote_host=dbgp_proxy_hostname_or_ip xdebug.remote_port="<Xdebug 连接的端口(默认为9000)>"
有关配置 Xdebug 的详细信息,请参阅配置 Xdebug。
配置从 PhpStorm 访问 DBGp 代理服务器
在浏览器中启动调试会话
故障排除
远程文件路径未映射到项目中的任何文件路径
在某些情况下,调试器可以连接,但我们收到错误消息,表明没有定义远程文件和项目文件之间的映射。这意味着 PhpStorm 无法确定哪个本地文件对应于正在调试的文件。
我们可以通过单击单击设置路径映射并提供必要的路径映射来解决此问题。此外,我们可以使用配置与 Web 服务器同步中概述的技术来配置这些映射。
由于目标机器主动拒绝,无法建立连接
确保 PhpStorm 已向DBGp 代理注册,并且它正在侦听传入的调试器连接。
确保在 PhpStorm 和调试器小书签或浏览器扩展中设置了正确的 IDE 密钥。
是否有防火墙阻止与 DBGp 代理的连接?如果是这样,请确保 PHP Xdebug 扩展可以连接到它,以及开发人员机器。您可以使用http://canyouseeme.org或类似服务来检查打开的入站端口。
是否有防火墙阻止与 IDE 的连接?确保可以从 DBGp 代理机器连接到 PhpStorm。您可以使用http://canyouseeme.org或类似服务来检查打开的入站端口。
DBGp 代理应用程序绑定到错误的 IP 地址。使用0.0.0.0作为地址运行它,以便它绑定到 DBGp 代理服务器上的任何 IP 地址。例如,运行
dbgpproxy -i 0.0.0.0:9001 -s 0.0.0.0:9000
.
当在同一台机器上安装 Xdebug 和 DBGp 代理在 PhpStorm 中测试多用户调试时,还有一些额外的事情需要验证:
PhpStorm 绑定到错误的 IP 地址。当 DBGp 代理在同时运行 PhpStorm 的本地计算机上运行时,IDE 可能使用了错误的网络子网。要解决此问题,请选择0.0.0.0。然后,尝试使用 DBGp 代理重新注册 PhpStorm。
在主菜单中并将 DBGp 代理服务器 IP 地址设置为存在端口冲突。在本地机器上测试 DBGp 时,PhpStorm 和 DBGp 可能都希望绑定到同一个端口。设置/首选项对话框的 页面Ctrl+Alt+S。
上的 PhpStorm 的 Xdebug 端口来确保不是这种情况。