远程 PhpStorm 中的 Xdebug 不适用于 Virtual Box 中的项目 SSH

Xdebug in remote PhpStorm doesn't work with project in Virtual Box by SSH

提问人:Pavel Sumarokov 提问时间:11/18/2023 最后编辑:Pavel Sumarokov 更新时间:11/24/2023 访问量:51

问:

主机是 Windows。在虚拟机 - Ubuntu 中,Docker 容器中有一个 PHP 项目,适配器是 Bridge,通过 IP 192.168.0.104 从主机访问。在虚拟机项目映射到 IP 172.16.100.1(端口 10443)上。我已经在主机系统中使用 JetBrains Gateway 打开了这个项目,并将 PhpStorm 安装到 VM 中。PhpStorm 中的设置:

Settings PHP

Settings PHP > Debug

Settings PHP > Debug > DBGp Proxy

Settings PHP > Servers

文件 xdebug.ini:

[xdebug]
zend_extension=xdebug.so

xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.mode=coverage,debug
xdebug.start_with_request=yes
xdebug.remote_port=9003
xdebug.client_port=9000
xdebug.remote_host=172.16.100.1
xdebug.client_host=localhost
xdebug.discover_client_host=1
xdebug.remote_connect_back = 0
; xdebug.remote_log=/tmp/xdebug.log
; xdebug.log=/tmp/xdebug.log

稍后使用相同的文件:

[xdebug]
zend_extension=xdebug.so
xdebug.mode=coverage,debug
xdebug.client_host=172.16.100.1
xdebug.client_port=9003

根据 9003 端口分析的结果,我猜这个端口被监听了(在 VM 中调用):

$ sudo lsof -i -P -n | grep 9003
ld-linux- 12243           pavel  296u  IPv6 262575      0t0  TCP *:9003 (LISTEN)

我已经打开了Xdebug并在index.php的开头设置了一个断点。在 PowerShell 中创建 ssh-tunnel:

ssh -R 9000:localhost:9003 [email protected]

md.mydomain.local链接到 IP 。C:\Windows\System32\drivers\etc\hosts192.168.0.104

在浏览器中导航 - 远程 PhpStorm 既不停止,也不产生类似“...没有被暂停”md.mydomain.local:10443

ssh phpstorm virtualbox xdebug

评论

0赞 zobo 11/18/2023
老实说,我并不完全理解您的设置,但是我最近发现的 - 这可能会在您的设置中发挥作用 - 是,如果您有一个仅限主机的网络,您的VirtualBox VM您的主机将能够连接到VM,但不能相反。
0赞 LazyOne 11/18/2023
由于特定设置(带有 Docker 和 JetBrains Gateway 的 Virtual Box)而无法评论您的问题。但需要注意一些:1)你真的使用DBGp代理吗?你知道它是干什么用的吗?您知道您实际上需要安装并运行实际的代理软件吗?不需要本地/容器开发。
0赞 LazyOne 11/18/2023
2) 您的 Xdebug 设置 -- 您将 Xdebug v2 和 v3 参数混合在一起,并具有不同的值(即 v2 的端口 9000 和 v3 的 9003)。坚持使用您实际拥有的版本 - 帮助消除误解(因为看起来您可能以错误的方式使用它们(它们看起来一团糟))。v2 的大多数参数在 v3 中不执行任何操作。还要检查 xdebug.org/docs/upgrade_guide
1赞 Eugene Morozov 11/21/2023
使用此设置,您不需要 SSH 隧道。我们也可以忽略这样一个事实,即它都在 Windows 中运行,因为 PhpStorm 通过远程开发在 VM 中运行;因此,从 Xdebug 的角度来看,我们有一台运行 Docker 容器的 Linux 机器,其中有一个 Web 服务器。现在,您需要找到容器可用于连接到 VM 的主机名(而不是您似乎想要的 Windows 主机),并将此主机名用作 .通常,工作正常xdebug.client_hosthost.docker.internal
1赞 Eugene Morozov 11/21/2023
此外,请确保禁用,直到您真正在 PhpStorm 中获得调试会话 - PHP |您手动创建的服务器条目是错误的,因此所有传入会话都将被忽略Ignore external connections through unregistered server configurations

答: 暂无答案