Programmation PHP/Xdebug
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
modifierLinux
modifierInstallation 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
modifierExemple 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
Exemple en V2
On peut aussi forcer d'autres paramètres[4] :
sudo apt-get install php7.4-xdebug
&& echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_port=9000" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/php.ini
Docker
modifierAvec 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
modifierWamp 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
modifierDans un navigateur
modifierIl 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
modifierOn peut ajouter un argument à PHP[9]. Ex :
php -d xdebug.profiler_enable=1 bin/console MaCommande.php
Débogage pas à pas
modifierLors du débogage, PhpStorm fera apparaitre un menu "Debug" avec trois sous-menus dont :
- la liste des variables du script et leurs valeurs (modifiables à la volée)
- les warnings PHP
- 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
modifierAjouter 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- ↑ « PHPStorm : Xdebug »
- ↑ « Tutoriel PHP : Xdebug, l'exécution pas à pas »
- ↑ https://xdebug.org/docs/upgrade_guide
- ↑ https://xdebug.org/docs/all_settings
- ↑ https://www.jetbrains.com/help/phpstorm/2023.2/configuring-xdebug.html#5a0181d2
- ↑ https://blog.eleven-labs.com/fr/debug-run-phpunit-tests-using-docker-remote-interpreters-with-phpstorm/
- ↑ https://addons.mozilla.org/fr/firefox/addon/xdebug-ext-quantum/?src=search
- ↑ https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html
- ↑ https://stackoverflow.com/questions/2288612/how-to-trigger-xdebug-profiler-for-a-command-line-php-script
- ↑ https://xdebug.org/docs/profiler
- ↑ https://xdebug.org/docs/profiler#related_content