Xdebug est un système qui permet de calculer le taux de couverture de code, de le profiler, ou de l'exécuter pas à pas.

Cela montre donc l'exécution plus précisément qu'en relecture seule, et élimine donc le risque de sauvegarder des "echo", des "print" ou des "var_dump" en production.

Installation

modifier

Installation sur Linux[1][2] :

sudo apt-get install php8.2-xdebug

ou

pecl install xdebug

Puis dans php.ini :

xdebug.remote_enable = On

ou sur PHP8.2 via Apache :

sudo vim /etc/php/8.2/apache2/conf.d/20-xdebug.ini

Ajouter :

xdebug.remote_enable=1

Configuration complète

modifier

Exemple en V3[3] :

sudo apt-get install php7.4-xdebug
&& echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.discover_client_host=0" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.client_port=9000" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.mode=debug" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/php.ini
 Le client_port par défaut est passé de 9000 à 9003 entre Xdebug 2 et 3[5].

Avec Docker, il faut aussi spécifier le "remote_host"[6].

Exemple d'installation et activation :

RUN pecl install xdebug-2.9.8 \
  && docker-php-ext-enable xdebug

RUN echo "xdebug.client_host = 172.170.0.1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.discover_client_host=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.client_port=9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

Windows

modifier

Wamp fournit Xdebug en mode "develop". Pour activer le débogage pas à pas, il faut donc éditer le php.ini :

xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.start_with_request=yes

Lancement

modifier

Dans un navigateur

modifier

Il faut installer un module sur son navigateur (ex : Xdebug-ext sur Firefox[7]) pour pouvoir activer ou désactiver le débogage d'une page. Ce module s'interface avec les principaux IDE, par exemple PhpStorm[8], pour leur faire lancer le débogage lors du chargement d'une page.

En ligne de commande

modifier

On peut ajouter un argument à PHP[9]. Ex :

php -d xdebug.profiler_enable=1 bin/console MaCommande.php

Débogage pas à pas

modifier

Lors du débogage, PhpStorm fera apparaitre un menu "Debug" avec trois sous-menus dont :

  1. la liste des variables du script et leurs valeurs (modifiables à la volée)
  2. les warnings PHP
  3. la sortie HTML.

Quand on clique dans la marge, un point d’arrêt est créé et représenté par une ligne rouge.

Raccourcis clavier (voir le menu "Run" en haut) :

  • F7 (step into) : mode pas à pas détaillé.
  • F8 (step over) : mode pas à pas sans sauter dans les dépendances.
  • F9 (resume) : poursuivre l'exécution du programme sans s'arrêter.
  • Alt + F9 : poursuivre jusqu'au prochain point d'arrêt.
  • Shift + F7 : pas à pas intelligent.

Profilage

modifier

Ajouter le mode au précédent[10] :

xdebug.mode=debug,profile

Un ensemble de vidéos explicatives existent en anglais[11].

Références

modifier