Reputation: 18660
I would like to try Xdebug 3.0.0RC1 to explore what has changed and the new features that come with it. I am also using the latest PhpStorm 2020.3 EAP which supports Xdebug 3 with no major config needed. Below is my PhpStorm config for the Debugger:
And here is the configuration I have tried for 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
I have also tried not adding the client_host/client_port
setting at all and still failing.
I am getting this error:
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
Some info about my environment:
It is curious (because apparently host.docker.internal
is "not" supported by the Docker version I am using and yet it works) and weird at the same time that the following configuration does work with Xdebug 2 even having the debugger listening for incoming connections all the time:
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
What I am missing here?
Note: I already applied the solution provided by the Xdebug developer here.
Upvotes: 63
Views: 146781
Reputation: 820
Just turn off log level with xdebug.log_level=0
in xdebug.ini file
Upvotes: 0
Reputation: 99
Another solution in Windows that sorted this issue quickly for me. The docker desktop is generating some lines in your hosts file with the IP that you laptop has the first time you run the docker application. If your IP is changed (run ipconfig in cmd to get your IP) then this information might not be updated. Therefore, just go to your host file an update the IP in the below lines
Upvotes: 0
Reputation: 1
working on ubuntu php 8.1
xdebug on ini
zend_extension=xdebug
[xdebug]
xdebug.mode=develop,debug
xdebug.client_host=host.docker.internal
xdebug.discover_client_host=1
xdebug.start_with_request=yes
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug on Docker",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/": "${workspaceFolder}"
}
}
]
}
Upvotes: 0
Reputation: 4383
Using Docker.
Solved by editing the auto generated launch.json
file:
In the config "name": "Launch Built-in web server"
Replace any occurrence of localhost
to thecontainer
's name.
In my case:
{
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=yes",
"-S",
"magento:0"
],
"program": "",
"cwd": "${workspaceRoot}",
"port": 9003,
"serverReadyAction": {
"pattern": "Development Server \\(http://magento:([0-9]+)\\) started",
"uriFormat": "http://magento:%s",
"action": "openExternally"
}
}
I replaced all localhost
with magento
(the container name).
I believe same solution should work for local development (not using Docker) if you are using custom domain name rather than localhost
.
Upvotes: 0
Reputation: 11
To fix this error "Xdebug: [Step Debug] Could not connect to debugging client. Tried: 127.0.0.1:9001 (fallback through xdebug.client_host/xdebug.client_port)." I found that I have to launch the Debugging on the Editor first, then start the web server because when you launch the Debugging on the Editor it will open the port 9001 as you set on the launch.json config then Xdebug on PHP can connect to this port.
Upvotes: 1
Reputation: 251
For wsl you need to force the client host.
Just open a command prompt:
wsl hostname -I
And this will give the ip:
C:\Users\rapha>wsl hostname -I 172.23.103.149
So them put at you xdebug.ini
xdebug.client_host=172.23.103.149
Upvotes: 3
Reputation: 1991
I created a very simple configuration that allows me to use Xdebug
with any PHP version with minimal effort (v2: 5.6-7.1, v3: 7.2-8.x). All I need to do is configure PhpStorm and docker-compose.yml
in three places and I can debug.
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
; ------------------------------------
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
; ------------------------------------
gander/dev @ 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"
#...
XDEBUG_SESSION=1 XDEBUG_CONFIG=1 php script.php
or:
docker-compose exec dev74 bash -c 'XDEBUG_SESSION=1 XDEBUG_CONFIG=1 php index.php'
This serverName
:
PHP_IDE_CONFIG: "serverName=dev.74"
This is the name of the PhpStorm PHP server (shown in the screenshot below)
Here is a list of extensions for various browsers: Browser debugging extensions
Upvotes: 15
Reputation: 1125
If you have tried all the above answers and still cannot connect to the XDebug server, try to add a new ALLOW
rule for your Xdebug port (9003
by default) or turn off your local firewall (not recommended, but it works).
Ubuntu and Mint firewall interface is ufw
and you can allow port 9003 by issuing the following command:
sudo ufw allow 9003
Verify the changes with:
sudo ufw status
Upvotes: 0
Reputation: 1378
I have the same issue if i'm working with the CLI:
Xdebug: [Step Debug] Could not connect to debugging client. Tried: 127.0.0.1:9003 (fallback through xdebug.client_host/xdebug.client_port) :-(
And this is my configuration that causes the warning message:
[XDebug]
...
xdebug.mode=develop,debug
xdebug.discover_client_host=1
xdebug.start_with_request = yes
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
I'm using the config for debugging from the URL, which is using the FPM, and it's working fine.
However, if I'm working with the CLI, then I must change the config, especially the xdebug.start_with_request
before (FPM):
xdebug.start_with_request = yes
after (CLI):
xdebug.start_with_request = trigger
As an additional information, I'm using Xdebug 3.
Upvotes: 1
Reputation: 121
To remove this error displaying in the console. Please mention the log path Xdebug going to use to store the logs. something similar mention below
xdebug.log=/var/www/var/log/xdebug.log
Upvotes: 0
Reputation: 5333
What worked for me was to change start_with_request
from yes to trigger
.
This worked for me:
xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.client_port=9003
EDIT:
As pointed out in the comments, the trigger/9003
are the default settings. If this answer works for you, it means something is overriding the default settings, and by explicitly using trigger/9003
, you force back to the default settings.
Upvotes: 37
Reputation: 616
I had same problem ( ubuntu 20.4 - docker 20.10 - xdebug 3)
My solution was:
xdebug.discover_client_host=1
sudo ufw disable
Upvotes: -4
Reputation: 101
I would like to point the attention to the following configuration option in the ini file, because that is what solved the same problem for me.
xdebug.client_host=host.docker.internal
In PhpStorm's documentation here says that xdebug.remote_host=host.docker.internal
has to be configured which seams similar, but is not.
A slight difference is that I use IntelliJ.
Upvotes: 4
Reputation: 6003
PHP 7.3
Docker (for Mac)
PhpStorm 2021.1
You may not need to install it via PECL (which took a long time to build and didn't work for me).
All I did was adding php7.3-xdebug
to my apt-get install
command and configure the port mapping correctly as follows:
In Dockerfile add:
RUN apt-get install -y php7.3-xdebug
In docker-compose.yml I mapped an extra_host
(this was the secret sauce for me):
services:
web:
extra_hosts:
- "host.docker.internal:host-gateway"
In 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
In PhpStorm I just started listening to port 9003 and configured the server mapping to my needs.
References:
Upvotes: 8
Reputation: 161
I had the same issue. I still have it when doing a request from a browser, but from the commandline, like in your case, it now works. What I was missing was a Server configuration with a path mapping. Once it set that up, along with the settings that you already have, it worked. I am on Mac Os Big Sur, using PhpStorm 2020.3
Upvotes: 0
Reputation: 688
PHP 7.4
Docker
PHPStorm 2020.1
Xdebug 3.1.0
Install Xdebug in your docker container using Dockerfile
RUN pecl install xdebug-3.0.1 && docker-php-ext-enable xdebug
Configure php.ini with following:
[xdebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = 1
Go to PHPStorm - Settings - PHP - Debug - Xdebug and set the port to 9003 (by default)
That's it (:
If you want to enable/disable debugger only when you need it: just install a browser extension called "Xdebug helper", select "Debug" and remove "xdebug.start_with_request = yes" from php.ini
[xdebug]
xdebug.mode = debug
xdebug.discover_client_host = 1
Upvotes: 58
Reputation: 18660
I will start saying big thanks to @LazyOne who spent some time helping me on this one until we make it to work. Here is how the config looks like for me currently and it is working fine:
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.mode=debug
xdebug.client_port=9005
You need also to update the Xdebug port at File | Settings | Languages & Frameworks | PHP | Servers
to reflect the new one but also enable the option to listen on Xdebug3 incoming connections. (I believe it is enabled by default in PhpStorm 2020.3)
That is the setup for a backend project where no browser is in the middle, I have not tried but for those, you might need:
xdebug.start_with_request=yes
And also have File | Settings | Languages & Frameworks | PHP | Servers
well configured.
Note: We found the host had enabled IPv6 and I disabled it and in addition, added the following setting to the IDE through
Help > Edit Custom VM options
:-Djava.net.preferIPv4Stack=true
. After added the IP4 setting to the IDE I haven't tried re-enabling IPv6 and see if Xdebug 3 still working
Upvotes: 4