Xdebug: 无法连接到调试客户端(Phpstorm + WSL2)

3
我正在尝试将最近的XAMPP开发设置转换为基于WSL2的LAMP堆栈。

到目前为止,我已经成功了。 我可以通过https://localhost/test.php访问我的测试页面test.php,其中包含<?php phpinfo();(出于开发目的使用自签名证书)。

不幸的是,我完全无法使Xdebug工作。
Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(

我已经浏览了这些线程,但没有找到解决方法:

我的设置:

  • 安装了WSL2的Windows 10
  • 带有Apache2的Ubuntu 20.04
  • PHP 8.0.5和Xdebug 3.0.4
  • PhpStorm (IDE)

我的Xdebug设置在/etc/php/8.0/apache2/php.ini中:

[xdebug]
xdebug.mode=debug
xdebug.remote_port=9003
xdebug.client_port=9003
xdebug.start_with_request=yes
xdebug.remote_host=localhost
xdebug.idekey=PHPSTORM
xdebug.discover_client_host=1

;xdebug.client_host=localhost
;xdebug.remote_enable=1
;xdebug.remote_handler=dbgp

我尝试过对“discover_client”进行注释,并将客户端主机明确设置为localhost,但没有改变。 phpinfo()的输出似乎表明这些设置不被忽略。请参见相关部分的截图
/etc/apache2/sites-available/default-ssl.conf中,虚拟主机的相关设置如下:
<VirtualHost: *:443>
    ServerName localhost
    DocumentRoot "/mnt/d/projects/testproject/public"
    <Directory "/mnt/d/projects/testproject/public/">
        Options +Indexes +Includes +FollowSymlinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

“all granted”只是调试时的临时设置。
我不知道这是否相关,但我确保 C:\Windows\System32\drivers\etc\hosts 包含。
127.0.0.1 localhost
::1 localhost

所以,当我运行时。
php -dxdebug.mode=debug /mnt/d/projects/testproject/public/test.php

我明白了。
Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(

有人看到问题吗?或者有人能给我一个提示,告诉我下一步该在哪里找吗?

你也在WSL2下运行xdebug客户端吗?你使用的是哪个xdebug客户端?你在哪里运行你的xdebug客户端?也许这个链接对你有帮助:https://superuser.com/q/1586386/63279 - undefined
谢谢您关注这个问题!我之前并不真正了解xdebug本身的客户端/服务器结构,一直以来都是运气好,一切都能正常工作。我查看了xdebug.org并下载了Simple DBGp客户端0.4.2版本,并在我的test.php上运行了它。我得到了“等待调试服务器连接到9003端口”的提示,当我在浏览器中访问“localhost/test.php”时,我的终端显示了一个连接,而浏览器则在等待。所以至少有一些进展。 - undefined
是的,我正在使用 PhpStorm。我正在使用验证工具,最初是它抛出了错误。验证脚本只是创建了一个名为"_intellij_php_validator.php"的文件,并尝试在CLI中运行它。我试图隔离问题,并在我的终端中直接运行了相同的命令。 - undefined
@friddle:请查阅PhpStorm文档,确认是否支持在WSL2上进行调试(以及直接执行PHP)。无论如何,xdebug需要从WSL2(Linux)连接到Phpstorm(Windows),并且网络必须能够双向通信。Phpstorm通常会等待连接的到来,因此在WSL2中的xdebug需要知道要连接到哪个地址(即IP地址)。我这里没有WSL2进行测试,但总体来说,应该只是网络设置的问题,你使用简单的dbgp客户端进行测试已经基本可行了。 - undefined
嗯,我觉得xdebug.discover_client_host=1应该是有效的。你是在Windows上测试吗(Phpstorm也在运行在Windows上)?在故障排除过程中,如果请求头检测不起作用,可以尝试显式设置xdebug.client_host为正确的值,这可能会有所帮助。 - undefined
显示剩余3条评论
1个回答

1
选项xdebug.start_with_request = yes告诉 Xdebug 尝试对每个请求或脚本进行调试。如果 Xdebug 无法连接到调试客户端(它从xdebug.client_hostxdebug.client_port获取值,或者如果启用了xdebug.discover_client_host自动检测主机),则会通知您。
通常这样的消息将被写入 PHP 的标准错误日志文件。看起来您没有在 php.ini 中配置它(因为这是默认设置),因此 PHP 会将其发送到标准输出。
如果您想防止它出现在终端输出中,则必须将 PHP error_log 指向有效位置。
以下是我解决此问题的示例:
1- 编辑您的 ini 文件: sudo vi /etc/php/7.4/cli/php.ini 2- 添加以下行: error_log = /var/www/log/php_error.log 注意: 将前面的路径更改为您想要的任何有效目录。
3- 再次尝试,警告应该消失,并且现在保存到日志文件中。

移除 xdebug.start_with_request 对我来说解决了这个问题。 - undefined
问题并不是应该隐藏错误信息。目标是通过解决问题并连接到调试客户端来摆脱错误消息。 - undefined
@CsongorHalmai 是的,你说得对,理想的答案应该是如何解决这个警告,但是我不知道该怎么做,而且我在这里也没有找到答案。在我的情况下,我只是希望将它隐藏起来,所以我想在这里留下如何做到这一点,以便对OP和其他人有所帮助。你有关于如何解决这个警告的建议吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接