10.Déboguer une application PHP

10.6.pugdebug

10.6.1.Introduction

Parmi les outils pouvant être utilisés en combinaison avec Xdebug pour faire du débogage pas à pas d'un script PHP, nous trouvons pugdebug.
Pugdebug n'est pas un outil très avancé et il ne s'agit pas d'un éditeur mais parce qu'il est simple d'installation (et de configuration) il va nous permettre de valider la bonne installation et configuration de Xdebug avant de passer à un débogage pas à pas avec un outil/éditeur plus évolué comme eclipse.

10.6.2.Installation

La version 1.0.0 (qui est semble-t-il la première et dernière version et qui est sortie en juillet 2015) est disponible en téléchargement pour windows et linux à l'adresse https://github.com/robertbasic/pugdebug/releases
Il suffit alors de décompresser l'archive récupérée dans le dossier de votre choix et exécuter le script principal pugdebug (après éventuellement avoir modifié les droits pour qu'il soit exécutable sous linux) pour lancer l'application

10.6.3.Utilisation

10.6.3.1.Lancement de pugdebug

En action voici ce que cela donne
Ecran principal pugdebug
Nous avons:
  • A gauche une vue sur les fichiers du projet
  • Au centre, le où les fichiers ouverts, avec les éventuels marqueurs de points d'arrêt (breakpoint)
  • A droite, les valeurs des variables en jeu et éventuellement les résultats d'expressions que l'on souhaite évaluer
  • En bas, la liste des points d'arrêt et la pile d'exécution
Autant dire, que nous avons déjà pas mal d'éléments pour travailler.
Mais pour en arriver là, il faut, après avoir lancé l'exécutable pugdebug, définir les paramètres du projet via le menu Fichier/Settings (ou new Project au choix).
Ecran de configuration pugdebug
Pour mieux nous y retrouver nous indiquerons dans le champ Root le chemin vers le dossier du projet PHP.
Nous vérifierons que les valeurs définies pour Host et Port correspondent bien à celles définies dans Xdebug[en savoir plus] (via xdebug.remote_host et xdebug.remote_port). A défaut, dans le cas d'un script en ligne de commande, il sera toujours possible de les modifier au moment du lancement du script (voir ci-après).
Enfin, nous noterons (et modifierons si besoin) la valeur indiquée dans le champ IDE Key.

10.6.3.2.Lancement du débogage

Avant même de lancer le script ou le serveur PHP, vous pouvez mettre pugdebug en attente d'informations en provenance de Xdebug. Pour cela, vous devez, cliquer sur le bouton "Start listening".

10.6.3.3.Avant de lancer le script ou serveur PHP

Pour pouvoir effectuer un débogage pas à pas, il convient de:
  • S'assurer que l'extension Xdebug a bien été installée et déclarée (ajout d'une ligne de la forme zend_extension=/chemin/vers/xdebug.so) au niveau du php.ini[en savoir plus]
  • S'assurer que le debogage distant a bien été activé au niveau du php.ini[en savoir plus]

10.6.3.4.Lancement du script PHP (cas ligne de commande)

Une fois Xdebug correctement configuré, vous pourrez, en ligne de commande taper
export XDEBUG_CONFIG="idekey=pugdebug"
php monscript.php
où "pugdebug" est la valeur précédemmment renseignée en tant que IDE Key dans la configuration de pugdebug et monscript.php est le script à lancer.
Si par hasard pugdebug écoute sur une IP ou un port différent de celui défini pour Xdebug dans php.ini et que vous ne souhaitez modifier ni la configuration de pugdebug ni celle de Xdebug, vous pouvez utiliser une IP ou un port alternatif en l'indiquant dans la variable d'environnement XDEBUG_CONFIG.
export XDEBUG_CONFIG="idekey=pugdebug remote_host=127.0.0.1 remote_port=9000"
php monscript.php

10.6.3.5.Lancement du serveur PHP (cas site web)

Pour débogger un site web écrit en PHP, avec Xdebug correctement configuré (Cf. au dessus), il suffit d'ajouter à l'URL appelée (typiquement le point d'entrée du site web mais cela peut se faire à tout moment) un paramètre GET ayant pour nom XDEBUG_SESSION_START et pour valeur celle saisie dans la configuration de pugdebug dans le champ IDE key. Ainsi plutot que d'appeler http://mondomaine.com (resp http://mondomaine.com/monscript.php ou http://mondomaine.com/monscript.php?cle=valeur) vous appelerez http://mondomaine.com/?XDEBUG_SESSION_START=pugdebug (resp. http://mondomaine.com/monscript.php?XDEBUG_SESSION_START=pugdebug ou http://mondomaine.com/monscript.php?cle=valeur&XDEBUG_SESSION_START=pugdebug).
Si vous avez bien mis pugdebug en attente (avec Start listening) alors vous devriez voir apparaître le contenu du premier script appelé avec en grisé la première commande appelée. A vous de jouer alors avec les points d'arrêt (un simple clic sur une ligne permet d'en ajouter/supprimer) et les fonctions "run", "over", "in" et "out".