【问题标题】:Xdebug: Could not connect to debugging client (Phpstorm + WSL2)Xdebug:无法连接到调试客户端(Phpstorm + WSL2)
【发布时间】:2021-07-03 11:30:27
【问题描述】:

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

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

遗憾的是,我完全无法让 Xdebug 正常工作。

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

我已经通过这些线程,但无济于事:

我的设置:

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

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

[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() 的输出似乎表明这些设置没有被忽略。见screenshot of the relevant parts。

/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>

(“全部授予”仅在调试时是暂时的)

我不知道这是否相关,但我确保 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 客户端? / 也许这有帮助? superuser.com/q/1586386/63279
  • 感谢您对此进行调查!我并不真正了解 xdebug 本身的客户端/服务器结构,我一直很幸运,一切正常。我检查了 xdebug.org 并下载了 Simple DBGp 客户端 0.4.2 并在我的 test.php 上运行它。我得到“等待调试服务器连接端口 9003”,当我在浏览器中访问“localhost/test.php”时,我的终端在浏览器等待时显示连接。所以至少有些东西。
  • 酷,所以实际上,当你说“它刚刚工作”时,你当时用的是什么?您可能没有将其称为客户端,而是其他名称(当时充当调试客户端),例如 editor、debugger、IDE。哪一个?我猜你想继续使用那个,对吧?
  • 是的,我正在使用 PhpStorm。我正在使用验证工具,它是最初抛出错误的工具。验证脚本只是创建一些文件“_intellij_php_validator.php”并尝试使用 CLI 运行它。我试图隔离问题并直接在我的终端中运行相同的命令。
  • @friddle:请查看 PhpStorm 文档是否支持 WSL2 进行调试(并直接执行 PHP)。在任何情况下,xdebug 都需要从 WSL2 (Linux) 连接到 Phpstorm (Windows),反之亦然。 Phpstorm 通常会等待连接进来,因此 WSL2 中的 xdebug 需要知道要连接到哪个地址(IP 地址)。我这里没有用于测试的 WSL2,但总而言之,它应该只是网络,您使用简单的 dbgp 客户端进行的测试已经表明它基本上可以工作。

标签: php apache2 xdebug windows-subsystem-for-linux


【解决方案1】:

xdebug.start_with_request = yes 选项告诉 Xdebug 尝试调试每个请求/脚本。如果 Xdebug 无法连接到调试客户端(它从 xdebug.client_host 和 xdebug.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- 再试一次,警告应该会消失,现在进入日志文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2016-12-25
    相关资源
    最近更新 更多