2017-04-12 1 views
4

J'utilise XDebug avec PHP version 7.0. * Depuis 6 mois sur un MAC en utilisant le débogage distant dans un conteneur Docker.Docker et XDebug ne lisent pas les points d'arrêt VSCode

J'utilisais une ancienne version de docker qui utilisait VirtualBox pour VM pour docker, tout fonctionnait correctement.

J'ai récemment mis à jour docker à la version 17.03.1 et n'ai eu que des problèmes avec xDebug. J'ai contacté le créateur de vscode-php-debug par l'intermédiaire d'un problème sur son dépôt et il m'a alors indiqué de prendre le problème avec xdebug et ou docker.

Ma question est la suivante:

XDebug est en cours d'exécution et de travailler sur mon conteneur, le journal xdebug montre qu'il se connecte à mon IDE, mais il ferme simplement la connexion comme s'il n'y a pas de points d'arrêt quand j'ai points d'arrêt dans VSCode.

La question que j'ai posté sur vscode-php-debug peut être trouvé here

Ce qui a une copie de mes journaux de XDebug et les journaux de débogage VSCode ... Il montre que la connexion est établie, mais aucun point d'arrêt sont touchés.

J'ai lu autour de quelques blogs que docker a maintenant besoin d'un IP de bouclage créé pour la connexion à xdebug pour travailler, que j'ai également essayé et échoué.

Je trouve cela étonnamment difficile de déboguer sans débogueur après en avoir utilisé un pendant si longtemps.

J'ai essayé de nombreuses configurations, réinstallé, redémarré, reconstruit des images/conteneurs et j'ai même essayé les canaux docker et xdebug irc sur freenode sans aucun succès.

+0

Avez-vous des chances d'être sur un Mac? Parce qu'il y a quelques problèmes avec docker pour mac (version communautaire) et xdebug. Je l'ai obtenu en exécutant une commande à chaque redémarrage. – Bram

+0

Oui, je suis sur un mac – joshualawson

Répondre

3

Depuis que vous utilisez docker sur un mac, je poste la façon dont ma solution a fonctionné. La plupart des crédits vont à this post on the docker forum.

En supposant que votre installation de xdebug est correctement, ceci est ma config dans le php.ini.

[xdebug] 
xdebug.remote_host=10.254.254.254 
xdebug.remote_autostart=1 
xdebug.idekey = PHPSTORM 
xdebug.default_enable = 0 
xdebug.remote_enable = 1 
xdebug.remote_connect_back = 0 
xdebug.profiler_enable = 1 

Vous pouvez tester votre configuration en exécutant cette commande dans votre terminal. sudo ifconfig en0 alias 10.254.254.254 255.255.255.0.

Si cela fonctionne, vous pouvez le convertir en un fichier plist et placez-le à l'emplacement suivant. /Library/LaunchDaemons/com.docker.xdebugFix.plist. Ci-dessous vous trouverez ma version du fichier plist.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.docker.xdebugFix</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>ifconfig</string> 
     <string>en0</string> 
     <string>alias</string> 
     <string>10.254.254.254</string> 
     <string>255.255.255.0</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
</dict> 
</plist> 

Remarque: Le plist ne fonctionnera qu'après un redémarrage de votre Mac.

Après que je mis ma tempête de PHP avec un serveur de débogage comme ceci: php storm config 1

php storm config 2

Après que mes points d'arrêt où le travail, si vous utilisez Chrome, vous aurez également besoin d'utiliser l'extension xdebug mais je suis sûr que vous le savez depuis que vous l'avez utilisé dans le passé.

+0

C'est le processus que j'ai déjà essayé ...sans succès ... mais je pourrais essayer encore une fois aujourd'hui – joshualawson

+0

Malheureusement, cela ne fonctionne toujours pas ... J'ai aussi essayé xdebug de chrome ... XDebug signale que la connexion est connectée mais pas de points d'arrêt et elle ne fonctionne pas même casser au début si je l'ai mis dans mon IDE ou chromes xdebug extension .... – joshualawson

+0

J'ai trouvé le problème et il était dû à ma configuration docker-compose.yml ... avec l'ancienne version de docker qui était en cours d'exécution sur VirtualBox J'ai dû ouvrir mon container container 9000 pour que xDebug puisse utiliser le tunnel pour se connecter à mon host ... qui avec docker provoque maintenant des conflits ... Donc la réponse ci-dessus est correcte mais une note de côté pour tous ceux qui ont DID port 9000 ouvert sur leur conteneur ... il n'a plus besoin d'être ouvert/retransmis – joshualawson