Statamic Peak

Article

Démarrer avec xDebug

Dans cet article, on va voir comment installer et configurer Xdebug pour permettre l'ajout de breakpoints dans son code PHP.

Installation

Vérifier si Xdebug est installé avec sa version de PHP

Via la console

php -v

Vous devez alors récupérer les informations sur la version de PHP utilisée actuellement. Par exemple:

PHP 7.2.18 (cli) (built: May  2 2019 13:03:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
	with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans
    with Zend OPcache v7.2.18, Copyright (c) 1999-2018, by Zend Technologies

L’important est d’avoir l’information with Xdebug vX.X.X.

Via un fichier php

<?php phpinfo();

Il faut ensuite chercher dans la liste des extensions (classées par ordre alphabétique).

Installer Xdebug sur Mac

Avec MAMP

Xdebug est déjà inclus, il n’y a rien à faire ! ;)

Avec Homebrew

Pour voir si une version de PHP est installée via Homebrew :

brew list

La commande va lister toutes les formules installées, il faut alors chercher celles qui concernent php:

  • php56
  • php70
  • etc.

Depuis Homebrew 1.5, les formules PHP sont sous la forme php@X.X (ex : php@7.2). Pour les installer il faut de faire :

brew install php@7.2

Il est également possible d'installer directement la dernière version avec :

brew install php

Si vous avez déjà une version de PHP d'installée avec Homebrew, il faut changer le lien du $PATH :

brew unlink phpXX # votre version actuelle 
brew link php@X.X --force # la nouvelle version installée

L'installation d'Xdebug n'est plus gérée par Homebrew, il faut utiliser PECL pour les extensions PHP maintenant. Cette CLI est inclut dans la formule PHP.

Il faut dans un premier temps mettre à jour la liste des canaux utilisés :

pecl update-channels

On peut ensuite installer Xdebug :

pecl install xdebug

Si ce n'est pas fait automatiquement, il faut activer l'extension dans le fichier php.ini :

zend_extension="/usr/local/php/modules/xdebug.so"

Pour Homebrew < 1.5.0

Chaque formule représente une version de php. Si aucune n’est présente, il suffit d’installer la version de son choix avec :

brew install phpXX

La commande ne va probablement pas marcher la première fois et va vous demander d’ajouter homebrew/php à votre liste de « tap » puis recommencer l’install :  

brew tap homebrew/php
brew install phpXX

Si ce n’est pas bon, il faut vérifier son $PATH. Si c’est bon, il nous reste à installer Xdebug.

brew install phpXX-xdebug

De la même façon, on peut installer facilement de nombreuses extensions PHP, pour avoir la liste complète :

brew search phpXX

Installer Xdebug sur Windows

Avec WAMP

Xdebug est déjà inclus, il n’y a rien à faire ! ;)

A la main

N’étant pas expert Windows, je ne peux pas vous expliquer comment y installer PHP. Chocolatey est une piste à explorer :

https://chocolatey.org/

Xdebug dispose de versions pré-compilées pour Windows et propose un assistant pour vous aider à choisir la bonne version. L’assistant :

https://xdebug.org/wizard.php

La liste des versions-précompilées :

https://xdebug.org/download.php

Installer Xdebug sur Linux

L’assitant d’Xdebug est là pour vous aider :

https://xdebug.org/wizard.php

Configuration

Localiser ses fichiers php.ini

Pour savoir où se situe vos fichiers .ini :

php --ini

Vous obtiendrez par exemple :

Configuration File (php.ini)
Path: /usr/local/etc/php/5.6
Loaded Configuration File:         /usr/local/etc/php/5.6/php.ini 
Scan for additional .ini files in: /usr/local/etc/php/5.6/conf.d Additional .ini files parsed:      /usr/local/etc/php/5.6/conf.d/ext-intl.ini,
/usr/local/etc/php/5.6/conf.d/ext-mongo.ini, /usr/local/etc/php/5.6/conf.d/ext-opcache.ini, /usr/local/etc/php/5.6/conf.d/ext-ssh2.ini, /usr/local/etc/php/5.6/conf.d/ext-xdebug.ini

Si vous ne disposez pas de fichiers spécifiques pour vos extensions, c’est que toute la configuration est à mettre dans php.ini.

Autoriser le debug distant

Ici, distant est à prendre dans le sens « par une autre application », en l’occurence un IDE ou autre.

On va ajouter (ou modifier si les variables sont déjà définies) la ligne suivante :

xdebug.remote_enable=1

De cette façon, on lui dit d’accepter les debug distants, provenant uniquement de l’ip 127.0.0.1.  Par défaut, les valeurs suivantes sont pré-configurées (et pleins d’autres) et il n’y a pas besoin de les ajouter dans le fichier .ini :

xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=0
xdebug.remote_handler=dbgp

Vérifier la disponibilité du port 9000

Pour qu’un IDE ou un debugger réagisse aux informations provenant d’Xdebug, il doit écouter le 9000 et pour cela, le port doit être disponible.

Sur Windows

netstat -ano | find "9000"

Sur Mac / Linux

lsof -i tcp:9000

Si le port n’est pas libre, il faut quitter manuellement l’application responsable (ou la kill / killall).

Connexion avec un IDE / debugger

Cette partie va grandement dépendre en fonction du logiciel utilisé mais les étapes restent globalement les mêmes pour tous.  Il vous faut un serveur PHP en marche  avec vos fichiers accessibles en HTTP :

  • soit via MAMP ou autre
  • soit via le serveur inclut à php
php -S 127.0.0.1:5555

Une fois cela fait, vous devez ajouter un breakpoint dans votre code à l’emplacement de votre choix ou cocher une case dans les options de votre debugger « Break on first line of execution ».

Si l’IDE / le debugger vous propose de saisir une IDE KEY, choisissez en une ou utilisez celle par défaut (souvent c’est le nom du programme, PHPSTORM pour PhpStorm). Il faut juste se la noter pour plus tard. On peut alors mettre en marche son debugger (via un bouton en forme d’insecte en général), s’il ne le fait pas automatiquement.

Nous avons donc :

  • un serveur php lancé
  • un debugger lancé

Pour vérifier que le debugger est en route, on peut vérifier qu’il écoute bien le port 9000 :

Sur Windows : netstat -ano | find "9000"
Sur Mac / Linux: lsof -i tcp:9000

Si ce n’est pas le cas, il y a un problème au niveau de la configuration du debugger / IDE.

Se lancer à l’aventure

Après toute cette configuration, nos efforts vont enfin payer. On peut accéder à nos scripts normalement sans debug en HTTP :

http://127.0.0.1:5555

Pour activer le debug, il suffit d’ajouter un paramètre GET :

http://127.0.0.1:5555/?XDEBUG_SESSION_START=PHPSTORM

Si l’on a fourni une IDE KEY à notre IDE / Debugger, il faut utiliser la même. Sinon, on peut mettre 1.