Xdebug: [Step Debug] 无法连接到调试客户端

Rey*_*rPM 22 php xdebug phpstorm

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

在此处输入图片说明

这是我为 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
Run Code Online (Sandbox Code Playgroud)

我也试过根本不添加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
Run Code Online (Sandbox Code Playgroud)

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

  • 软呢帽 33
  • Docker 版本 19.03.13,构建 4484c46d9d
  • PhpStorm 2020.3 EAP 版本 #PS-203.5784.36

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

在此处输入图片说明

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
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

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

Dan*_*iro 31

对我有用的是将“是”更改start_with_request为“” 。trigger

这对我有用:

xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.client_port=9003
Run Code Online (Sandbox Code Playgroud)

编辑: 正如评论中指出的,它们trigger/9003是默认设置。如果这个答案对您有用,则意味着某些内容正在覆盖默认设置,并且通过显式使用trigger/9003,您可以强制恢复默认设置。

  • 请注意,当“xdebug.mode=debug”时,“xdebug.start_with_request”会自动设置为“trigger”,因此不需要定义它。`xdebug.client_port=9003` 也是 Xdebug 3 的默认值,因此也不需要。参考: https://xdebug.org/docs/all_settings#start_with_request https://xdebug.org/docs/all_settings#client_port (6认同)

小智 27

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
Run Code Online (Sandbox Code Playgroud)

使用以下配置 php.ini:

[xdebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = 1
Run Code Online (Sandbox Code Playgroud)

转到 PHPStorm - Settings - PHP - Debug - Xdebug 并将端口设置为9003(默认)

PHPStorm

就是这样 (:

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

[xdebug]
xdebug.mode = debug
xdebug.discover_client_host = 1
Run Code Online (Sandbox Code Playgroud)

  • 添加 `xdebug.discover_client_host = 1` 并仔细检查我的端口是解决方案,谢谢! (5认同)
  • 我尝试了这个确切的配置,但我仍然得到“无法连接到调试客户端”。尝试过:172.19.0.1:9003(来自 REMOTE_ADDR HTTP 标头)` (3认同)

Gan*_*der 14

我创建了一个非常简单的配置,使我可以Xdebug轻松地使用任何 PHP 版本(v2:5.6-7.1,v3:7.2-8.x)。我需要做的就是配置PhpStormdocker-compose.yml在三个地方进行调试。

配置:

gander/dev @ xdebug2.ini

zend_extension=xdebug.so
; https://2.xdebug.org/docs/all_settings
; ------------------------------------
; Enables Step Debugging
xdebug.remote_enable=1
; ------------------------------------
; Address where IDE listening for incoming debugging connections
xdebug.remote_host=host.docker.internal
; ------------------------------------
; Port where IDE listening for incoming debugging connections
xdebug.remote_port=9003
; ------------------------------------
; Color var_dumps when in CLI
xdebug.cli_color=1
; ------------------------------------
Run Code Online (Sandbox Code Playgroud)

gander/dev @ xdebug3.ini

zend_extension=xdebug.so
; https://xdebug.org/docs/all_settings
; ------------------------------------
; Enables Step Debugging
xdebug.mode=debug,develop
; ------------------------------------
; Address where IDE listening for incoming debugging connections
xdebug.client_host=host.docker.internal
; ------------------------------------
; Port where IDE listening for incoming debugging connections
xdebug.client_port=9003
; ------------------------------------
; Color var_dumps when in CLI
xdebug.cli_color=1
; ------------------------------------
Run Code Online (Sandbox Code Playgroud)

甘德/开发@ docker-compose.yml

version: '3.7'

services:
#...
  dev74:
    hostname: 'dev-74'
    container_name: 'dev_74'
    image: 'gander/dev:7.4'
    volumes:
      - './app/xdebug3:/www/localhost'
    working_dir: '/www/localhost/public'
    ports:
      - '8074:80'
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      PHP_IDE_CONFIG: "serverName=dev.74"
#...
Run Code Online (Sandbox Code Playgroud)

通过 CLI 运行:

XDEBUG_SESSION=1 XDEBUG_CONFIG=1 php script.php
Run Code Online (Sandbox Code Playgroud)

或者:

docker-compose exec dev74 bash -c 'XDEBUG_SESSION=1 XDEBUG_CONFIG=1 php index.php'
Run Code Online (Sandbox Code Playgroud)

旁注:

serverName

PHP_IDE_CONFIG: "serverName=dev.74"
Run Code Online (Sandbox Code Playgroud)

这是 PhpStorm PHP 服务器的名称(如下面的屏幕截图所示)

截图:

x调试端口 配置 验证


以下是适用于各种浏览器的扩展列表: 浏览器调试扩展


Ric*_*ins 8

PHP 7.3
Docker(适用于 Mac)
PhpStorm 2021.1


您可能不需要通过 PECL 安装它(这花了很长时间来构建,并且对我来说不起作用)。

我所做的只是添加php7.3-xdebug到我的apt-get install命令中并正确配置端口映射,如下所示:

在 Dockerfile 中添加: RUN apt-get install -y php7.3-xdebug

在 docker-compose.yml 中,我映射了一个extra_host(这是我的秘密武器):

services:
  web:
    extra_hosts:
      - "host.docker.internal:host-gateway"
Run Code Online (Sandbox Code Playgroud)

在 php.ini 中:

[xdebug]
xdebug.mode=debug
xdebug.client_host=host.docker.internal

;optionals: (uncomment if you need them)
;xdebug.start_with_request=yes
;xdebug.discover_client_host=1
Run Code Online (Sandbox Code Playgroud)

在 PhpStorm 中,我刚刚开始监听端口 9003 并根据我的需要配置服务器映射。

参考:


Rey*_*rPM 4

我要开始向 @LazyOne 表示衷心的感谢,他花了一些时间帮助我完成这件事,直到我们成功为止。以下是我目前的配置,并且运行良好:

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.mode=debug
xdebug.client_port=9005
Run Code Online (Sandbox Code Playgroud)

您还需要更新 Xdebug 端口File | Settings | Languages & Frameworks | PHP | Servers以反映新端口,但还需要启用侦听 Xdebug3 传入连接的选项。(我相信它在 PhpStorm 2020.3 中默认启用)

在此输入图像描述

这是后端项目的设置,中间没有浏览器,我没有尝试过,但对于这些,您可能需要:

xdebug.start_with_request=yes
Run Code Online (Sandbox Code Playgroud)

而且File | Settings | Languages & Frameworks | PHP | Servers配置也不错。

注意:我们发现主机已启用 IPv6,我将其禁用,此外,通过Help > Edit Custom VM options:向 IDE 添加了以下设置-Djava.net.preferIPv4Stack=true。将 IP4 设置添加到 IDE 后,我还没有尝试重新启用 IPv6 并查看 Xdebug 3 是否仍然有效