web-dev-qa-db-fra.com

XDebug sur le port 9000 avec une machine virtuelle - EADDRINUSE ::: 90000

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?

11

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.

1

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:

  • mettre à jour votre configuration IDE xdebug du port 9000 au port 9001;
  • 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.

2
yarche

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.

1
Webvoid

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.

0
raison