Xdebug: [步骤调试] 无法连接到调试客户端

2022-08-30 13:23:34

我想尝试Xdebug 3.0.0RC1来探索发生了什么变化以及随之而来的新功能。我还使用最新的PhpStorm 2020.3 EAP,它支持Xdebug 3,不需要主要配置。以下是我为调试器配置的PhpStorm:

enter image description here

以下是我尝试过的Xdebug3配置:

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal # here I tried several combinations like: "localhost", "127.0.0.1", "172.17.0.1"
xdebug.client_port=9001 # here I tried several ports 9003 included with no success

我也尝试过根本不添加设置,但仍然失败了。client_host/client_port

我收到此错误:

Script php bin/console doctrine:cache:clear-metadata returned with error code 255
!!  [17-Nov-2020 15:24:40 UTC] Xdebug: [Step Debug] Could not connect to debugging client. Tried: host.docker.internal:9001 (through xdebug.client_host/xdebug.client_port) :-(
!!  [17-Nov-2020 15:24:41 UTC] PHP Fatal error:  Method class@anonymous::__toString() must not throw an exception, caught Symfony\Component\DependencyInjection\Exception\AutowiringFailedException:  in /var/www/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php on line 233

有关我的环境的一些信息:

  • Fedora 33
  • Docker 版本 19.03.13,内部版本 4484c46d9d
  • Php风暴 2020.3 EAP 内部版本 #PS-203.5784.36

它很奇怪(因为显然我正在使用的Docker版本“不支持”,但它可以工作),同时奇怪的是,以下配置确实适用于Xdebug 2,即使调试器一直在监听传入连接:host.docker.internal

enter image description here

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.remote_autostart=0
xdebug.remote_enable=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9000

我在这里错过了什么?

注意:我已经在这里应用了Xdebug开发人员提供的解决方案


答案 1

PHP 7.4
Docker
PHPStorm 2020.1
Xdebug 3.1.0

使用 Dockerfile 在 Docker 容器中安装 Xdebug

RUN pecl install xdebug-3.0.1 && docker-php-ext-enable xdebug

配置 php.ini 如下所示:

[xdebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = 1

转到 PHPStorm - 设置 - PHP - 调试 - Xdebug 并将端口设置为 9003(默认情况下)

PHPStorm

就是这样(:

如果你想只在需要时启用/禁用调试器:只需安装一个名为“Xdebug helper”的浏览器扩展,选择“调试”并从php中删除“xdebug.start_with_request = yes.ini

[xdebug]
xdebug.mode = debug
xdebug.discover_client_host = 1

答案 2

对我有用的是将“是”更改为”start_with_requesttrigger

这对我有用:

xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.client_port=9003

编辑:如注释中所指出的,这些是默认设置。如果此答案适合您,则意味着某些内容正在覆盖默认设置,并且通过显式使用 ,强制返回到默认设置。trigger/9003trigger/9003


推荐