Xdebug: [Step Debug] Nie można połączyć się z klientem debugującym

Nov 17 2020

Chciałbym wypróbować Xdebug 3.0.0RC1, aby zbadać, co się zmieniło i nowe funkcje, które się z tym wiążą. Używam również najnowszego PhpStorm 2020.3 EAP, który obsługuje Xdebug 3 bez konieczności wykonywania większej konfiguracji. Poniżej znajduje się moja konfiguracja PhpStorm dla Debuggera:

A oto konfiguracja, którą wypróbowałem dla 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

Próbowałem też w ogóle nie dodawać client_host/client_portustawienia i nadal kończyło się to niepowodzeniem.

Otrzymuję ten błąd:

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

Kilka informacji o moim środowisku:

  • Fedora 33
  • Docker w wersji 19.03.13, kompilacja 4484c46d9d
  • PhpStorm 2020.3 EAP Build # PS-203.5784.36

Jest to ciekawe (ponieważ najwyraźniej host.docker.internal"nie" jest obsługiwane przez wersję Dockera, której używam, a mimo to działa) i jednocześnie dziwne, że następująca konfiguracja działa z Xdebug 2, nawet gdy debugger nasłuchuje połączeń przychodzących przez cały czas:

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

Czego tu brakuje?

Uwaga: ja już zastosował rozwiązanie dostarczone przez dewelopera Xdebug tutaj .

Odpowiedzi

6 AGriboed Dec 18 2020 at 17:26

PHP 7.4
Docker
PHPStorm 2020.1
Xdebug 3.1.0

Zainstaluj Xdebug w kontenerze Docker przy użyciu pliku Dockerfile

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

Skonfiguruj php.ini za pomocą:

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

Idź do PHPStorm - Ustawienia - PHP - Debug - Xdebug i ustaw port na 9003 (domyślnie)

PHPStorm

Otóż ​​to (:

Jeśli chcesz włączyć / wyłączyć debugger tylko wtedy, gdy go potrzebujesz: po prostu zainstaluj rozszerzenie przeglądarki o nazwie „Xdebug helper”, wybierz „Debuguj” i usuń „xdebug.start_with_request = yes” z php.ini

[xdebug]
xdebug.mode = debug
xdebug.discover_client_host = 1
1 ReynierPM Nov 18 2020 at 02:01

Zacznę wielkie podziękowania dla @LazyOne, który spędził trochę czasu, pomagając mi nad tym, dopóki nie zdążymy. Oto jak wygląda obecnie konfiguracja u mnie i działa dobrze:

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.mode=debug
xdebug.client_port=9005

Musisz także zaktualizować port Xdebug pod adresem, File | Settings | Languages & Frameworks | PHP | Serversaby odzwierciedlał nowy, ale także włączyć opcję nasłuchiwania połączeń przychodzących Xdebug3. (Uważam, że jest domyślnie włączony w PhpStorm 2020.3)

To jest konfiguracja dla projektu zaplecza, w którym nie ma przeglądarki w środku, nie próbowałem, ale do takich możesz potrzebować:

xdebug.start_with_request=yes

A także File | Settings | Languages & Frameworks | PHP | Serversdobrze skonfigurowany.

Uwaga: Okazało się, że gospodarz był włączony IPv6 i wyłączył go i dodatkowo dodaje następujące ustawienie IDE poprzez Help > Edit Custom VM options: -Djava.net.preferIPv4Stack=true. Po dodaniu ustawienia IP4 do IDE nie próbowałem ponownie włączać IPv6 i zobaczyć, czy Xdebug 3 nadal działa