【问题标题】:Unable to get PhpStorm to connect to Xdebug running in WSL 2无法让 PhpStorm 连接到在 WSL 2 中运行的 Xdebug
【发布时间】:2020-12-04 14:55:39
【问题描述】:

我无法通过以下设置使 PhpStorm 2020.2 与 xdebug 一起工作: WSL2 运行 Ubuntu 20,安装了 PHP 和 php-xdebug。每当我在启用调试的情况下运行测试时,它都会显示“连接未建立。”。

这是 Xdebug 日志显示的内容:

[5877] Log opened at 2020-08-14 17:20:45
[5877] I: Connecting to configured address/port: 172.18.48.1:9006.
[5877] E: Time-out connecting to client (Waited: 200 ms). :-(
[5877] Log closed at 2020-08-14 17:20:46

这仅适用于 CLI,我不尝试通过 php-fpm 进行连接(所以没有 Apache、nginx、...)。

到目前为止我已经尝试过:

  • 将端口更改为 9000 以外的端口(端口扫描还显示它们都没有被使用)。

  • 添加防火墙规则以允许传入请求,如https://github.com/microsoft/WSL/issues/4585#issuecomment-610061194 中所述(以及在添加规则后重新启动几次)

    New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
    
  • xdebug.remote_enable=1 之类的选项添加到配置中,但无论如何,这是由 PhpStorm 在运行远程 php 实例时完成的(remote_connect_back 也没有做到这一点):

    [wsl://UBUNTU2004]:php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9006 -dxdebug.remote_host=172.18.48.1 /home/spaceemotion/code/xxxxxx/backend/vendor/phpunit/phpunit/phpunit [rest ommitted]
    

任何帮助将不胜感激!

【问题讨论】:

  • 1) 请分享来自phpinfo() 输出的 Xdebug 部分(例如,将它放在你的 test.php 中并尝试调试它)。 2) 也显示来自 PhpStorm 的 Xdebug 相关设置。 3) “无法让 PhpStorm 连接到 Xdebug” 这是 Xdebug 连接到 IDE 而不是其他方式。 4) “remote_connect_back 也没有成功” 没错——该选项在 CLI 中没有任何作用,因为 PHP 根本没有填充 $_SERVER(仅适用于 Web 请求)。 5) 问题可能出在 PhpStorm 的 IP 地址检测中。它必须是运行 PhpStorm 的 IP(从 WSL 内部看)。
  • 6) 当 IDE 尝试调试会话时(“电话句柄”图标为绿色/IDE 侦听传入连接):仔细检查是否是 PhpStorm 侦听 Xdebug 端口(@98​​7654332@ 或类似) 7) 确保防火墙中允许 PhpStorm(甚至可以尝试在测试期间完全禁用它)。 8) 尝试使用telnet 从 WSL 连接到您的主机操作系统(Windows 10)——如果一切正常(主机:端口正确,防火墙没有问题),它将建立连接(就像 Xdebug 一样)。
  • 以防万一:jetbrains.com/help/phpstorm/… & jetbrains.com/help/phpstorm/troubleshooting-php-debugging.html 遗憾的是我自己还没有尝试过 WSL 调试,所以不知道可能需要的任何先决条件(比如允许制作的防火墙规则从 WSL 到主机的连接等)。
  • 哎哟。防火墙技巧实际上帮助我找到了问题。 intellij-support.jetbrains.com/hc/en-us/community/posts/… 谈到了与我尝试过的完全不同的防火墙设置对话框。检查了 phpstorm 的复选框,现在它可以工作了!

标签: php phpstorm xdebug windows-subsystem-for-linux wsl-2


【解决方案1】:

根据:https://intellij-support.jetbrains.com/hc/en-us/community/posts/360000436444/comments/360000168070

在 Windows 控制面板 > Windows 防火墙 > 允许程序或功能通过 Windows 防火墙中,您可以看到允许通过专用网络和公共网络进行通信的软件列表。

确保实际允许使用 phpstorm.exe(对我来说,未选中专用网络选项)。

【讨论】:

  • 我在使用 Visual Studio Code 时遇到了同样的问题。我的解决方案是在 Windows 的高级防火墙设置中添加允许规则。您还必须修改阻止规则,以允许您刚刚在新创建的允许规则中定义的流量。阻止规则由 Windows 给予优先级。问题的本质在于,WSL 网络接口被视为公共网络位置。对于 vscode,有 4 条规则。用于公共的 TCP/UDP 块。 TCP/UDP 允许私有。
猜你喜欢
  • 2016-10-01
  • 2015-09-11
  • 2015-08-03
  • 2018-06-03
  • 2019-09-03
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多