J'exécute mon application Symfony sur une machine virtuelle VirtualBox. PHP fonctionne avec XDebug et il est correctement configuré. Je le sais parce que d'autres personnes ont réussi à le faire fonctionner avec un instantané de la même machine virtuelle.
Lorsque j'essaie de configurer VS Code XDebug, j'utilise le launch.json
suivant
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.Microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
Mais lorsque je clique sur «Démarrer le débogage: écoutez XDebug», le message d'erreur suivant s'affiche:
ERREUR: écoutez EADDRINUSE ::: 9000
J'ai essayé de tuer le processus qui utilise ce port ... et, à ma grande surprise, c'était la machine virtuelle à laquelle je tentais de me connecter.
Qu'est-ce qui m'a manqué dans cette configuration?
J'ai trouvé la réponse moi-même à peu près.
Le problème résidait dans la configuration de Virtualbox.
Dans les paramètres réseau, il y avait une redirection de port pour le port 9000, ce qui a empêché mon débogueur de s'exécuter localement. Une fois enlevé, cela a fonctionné sans problème.
le port 9000 est fréquemment utilisé par les configurations par défaut d'autres applications (par exemple, Apache natif sur MacOsX), ainsi que de machines virtuelles, de conteneurs Docker, etc.
Une solution fiable consisterait à utiliser un port différent. Par exemple, 9001 :)
Cela signifie:
ajouter à votre php.ini (xdebug.ini) la ligne
xdebug.remote_port=9001
Vous pouvez également vérifier votre utilisation du port 9000 à l'aide d'un outil tel que telnet.
Vous essayez de faire une opération launch
dans votre launch.json
, ce qui se traduira par vscode en essayant de démarrer une nouvelle instance de php avec un xdebug sur le port 9000 .
Essayez de remplacer votre config launch
par une config attach
.
J'espère que ça aide.
Sur MacOS, nous pouvons utiliser le terminal pour déterminer ce qui est ouvert sur le port 9000 avec les éléments suivants:
Sudo lsof -nP -i4TCP:9000 | grep LISTEN
Nous pouvons utiliser Sudo ci-dessus afin de voir les processus qui ne sont pas détenus par le compte connecté.
Par exemple, quand j'ai fait ce qui précède, j'ai eu:
php-fpm 110 root 6u IPv4 0x5cb825c4aa80be09 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 261 _www 0u IPv4 0x5cb825c4aa80be09 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 262 _www 0u IPv4 0x5cb825c4aa80be09 0t0 TCP 127.0.0.1:9000 (LISTEN)
Nous pouvons alors terminer les processus avec cette commande:
Sudo kill 110
Ensuite, nous aurons le port libre afin de pouvoir démarrer Xdebug sans conflit.
Cela l'a résolu pour moi.