J'ai eu pendant longtemps des problèmes pour faire fonctionner XDEBUG avec ECLIPSE en remote debugging. Celà se manifestait par exemple avec ECLIPSE qui reste sur "Launching website.com 48% ou 57%" et aucun break ne fonctionnait.
Installation xdebug sur le serveur distant:
apt-get install php-xdebug
Modifier la config /etc/php/cgi/conf.d/20-xdebug.ini (emplacement visible dans phpinfo) :
# cat /etc/php5/cgi/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_port=9003
Changements xdebug v3.0
# cat /etc/php/7.3/fpm/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request
xdebug.client_port = 9003
xdebug.client_host = ip.ma.chine.locale
Paramétrage Eclipse sur la machine locale:
Dans le menu Eclipse windows > préférences > PHP > Debug > Installed debugger > Xdebug
Donner le port 9003 qu'on a défini sur le serveur distant.
Si à ce stade votre conexion marche de manière instable ou pas du tout
- Vérifier vos parefeus côté client et serveur ne bloquent pas le port 9003
- Vérifier le port mapping de votre routeur
si vous vous connectez à INTERNET via un routeur type FREEBOX ou XBOX vérifiez que les connexions sur le port 9003 sont bien transmises vers votre poste client
En effet, pour XDEBUG, il faut généralement ouvrir le port 9003 sur ce routeur et le faire suivre sur votre PC où tourne l'IDE. Sur un routeur VODAFONE, par exemple, cela peut ressembler à ceci:
- Utiilisez des adresses IP statiques
Mais si votre routeur est programmé pour attribuer des IP dynamiques par DHCP, il se peut qu'un jour votre téléphone mobile se voit attribuer l'IP 192.168.155 qu'avait votre PC lorsque vous avez configuré XDEBUG.
La solution est de forcer une ip statique lors la connexion de votre PC à votre routeur.
Sous Debian 9, avec NETWORK MANAGER cela peut se réaliser ainsi:
click droit sur l’icone wifi du tableau de bord
Configurer les connexions réseau > Définir une IP FIXE dans l’onglet IPV4
- Faire passer votre connexion sur le port Xdebug via un tunnel SSH
Un autre renforcement de la connexion est d'établir une connexion SSH sur le port XDEBUG avant de lancer Xdebug Eclipse:
ssh -R 9003:localhost:9003 userThis email address is being protected from spambots. You need JavaScript enabled to view it.
Vérifier qu'eclipse écoute sur le port de XDEBUG
$ sudo netstat -tnlp|grep 9003
tcp6 0 0 :::9003 :::* LISTEN 71098/java
Vérifier le traffic sur le port xdebug
Vous pouvez utiliser iptables pour vérifier que vous recevez bien quelquechose sur le port (9003 ici) où vous avez paramétré xdebug en déclenchant des logs dans syslog:
$ sudo iptables -I INPUT -p tcp --dport 9003 --syn -j LOG --log-prefix "HTTPS SYN: "
puis surveiller syslog pendant que vous lancez la page à débugger:
sudo tail -f /var/log/syslog
Mar 3 12:45:10 kmcs kernel: [14804.033727] HTTPS SYN: IN=enp3s0 OUT= MAC=b0:25:aa:35:14:85:60:12:3c:cc:82:09:08:00 SRC=s.s.s.s DST=d.d.d.d LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=38315 DF PROTO=TCP SPT=54306 DPT=9003 WINDOW=29200 RES=0x00 SYN URGP=0
Supprimer un utilisateur du port: fuser -k 9003/tcp
Conflit avec les alias
Si vous avez un alias défini sur votre domaine qui accède à un autre document root, xdebug ou Eclipse (?) ajoute automatiquement des path mapping à sa définition lorsque vous accédez à cet alias et ça ne break plus.
Exemple avec un Alias /phpmyadmin /usr/share/phpmyadmin. Xdebug ne break plus dès que vous accédez à votre-domaine.com/phpmyadmin. Faut passer par le-nom-du-server/phpmyadmin.
Autre methode avec plugin firefox
D'après https://jonathansblog.co.uk/remote-debugging-php-in-eclipse-with-xdebug
Télécharger le plugin FF https://addons.mozilla.org/en-US/firefox/addon/xdebug-helper-for-firefox/
Dans Eclipse > paramètres > php > debug > debugger > choisir xdebug > configure > chosir "Accept remote session" = any (peu importe le port)
Dans FF cliquer sur licone Xdebug dans la barre d'adresse > Debug ou Disable pour arrêter
Rafraichir la page.