PHP

Utiliser le debugger XDebug avec NetBean

Après avoir vu comment configurer les différentes versions de Zend, développer en PHP, nous allons maintenant voir comment debugger son code simplement avec Netbean et l’extension PHP XDebug.

XDebug qu’est-ce exactement? XDebug est une extension PHP gérant toute la partie debug. Dès qu’il est installé et activé, si vous faites une erreur PHP, XDebug vous affiche l’erreur avec la pile d’erreur à côté afin de vous aider à la corriger :

Julien Pauli a rédigé un très bon article de présentation et d’utilisation de XDebug que je vous invite à lire. XDebug va surtout nous servir ici à effectuer du debuggage comme sous Java avec des breakpoints, savoir quelle sera la valeur des variables au moment du breakpoint et savoir surtout si votre programme tourne rond.

Avant de commencer, assurez vous que l’extension xdebug est bien présente sur votre serveur (lamp pour linux, wamp ou easyphp pour windows et mamp pour mac) via la commande php -m ou via le phpinfo. Si XDebug n’est pas installé, vous avez juste à l’installer via la commande suivante pour linux Ubuntu :

apt-get install php5-xdebug

Normalement, via php -m vous devriez obtenir ceci :

Si vous ne voyez pas XDebug dans la partie [Zend Modules], vous devez configurer l’extension comme ceci directement dans son fichier /etc/php5/conf.d/xdebug.ini :

zend_extension=/usr/lib/php5/20090626/xdebug.so

Ensuite relancez apache et le tour est joué. Maintenant, nous allons nous intéresser à la configuration de XDebug pour le faire fonctionner avec Netbean. Tout d’abord, pour que tout fonctionne, nous devons retoucher au fichier de configuration de XDebug comme ceci : /etc/php5/conf.d/xdebug.ini

zend_extension=/usr/lib/php5/20090626/xdebug.so

;on active le debug à distance
xdebug.remote_enable=on
;on utilise le protocole dbgp
xdebug.remote_handler="dbgp"
;le port à appeler pour debugger avec xdebug
xdebug.remote_port=9000
;IP du serveur XDebug, ici on pet l'ip d'eth0
xdebug.remote_host=192.168.128.128
;clé utilisée pour identifier notre ide
xdebug.idekey="netbeans-xdebug"
;permet la connexion à distance
xdebug.remote_connect_back=1

A la ligne 10, l’ip utilisée est l’ip du serveur où nous requetons. Si le serveur est en local par rapport à l’ide et au navigateur, nous aurions mis 127.0.0.1. Ici, vu que le serveur n’est pas sur la même machine que l’ide, nous mettons son ip sur le réseau. A la ligne 12, l’idekey est la clé rentrée dans votre ide, par défaut dans netbean, elle vaud netbeans-xdebug.

C’est pour ça que j’ai mis cette idekey. Maintenant que Xdebug est configuré comme il faut et votre serveur apache relancé, nous allons maintenant nous intéresser à Netbean. Pour debugger, j’utilise projet tout bête. Voici les sources : index.php

<html> 
    <body>
        <?php
            for ($index = 0; $index < 45; $index++) {
                echo $index;
            }
        ?>
    </body>
</html>

Rendez-vous dans netbean, faites clic droit sur votre projet => propriété. Ensuite rendez-vous dans la section Run Configuration et changez la ligne Project Url par l’adresse que vous devez rentrer dans votre navigateur pour accéder à votre projet.

 

Aller sur la page que vous voulez de votre projet puis rajoutez un point d’arrêt en cliquant une fois sur le numéro de la ligne souhaitée :

Vous êtes normalement prêt à debugger votre application mais avant ça, regardons de plus prêt la barre de debuggage de Netbean :

  • Bouton 1 : Lance le projet normalement
  • Bouton 2 : Lance le projet en mode Debug
  • Bouton 3 : Lance le projet en mode profilage
  • Bouton 4 : Arrête le mode Debug
  • Bouton 5 : Continuer jusqu’au prochain breakpoint
  • Bouton 6 : Exécute une ligne de source. Si la ligne de source contient un appel, il exécute toute la routine sans rentrer dans les instructions individuelles.
  • Bouton 7 : Exécute une ligne de source. Si la ligne de source contient un appel, s’arrête juste avant l’exécution de la première instruction de la routine appelée.
  • Bouton 8 : Sort de la fonction courante
  • Bouton 9 : Se déplace jusqu’au curseur

Maintenant il ne reste plus qu’à enregistrer les variables à surveiller lors du debug. Pour se faire, vous devez surligner la variable que vous voulez puis faire la manipulation CTRL + MAJ + F7. Normalement, vous devriez avoir la fenêtre suivante :

Pour voir vos variables, vous devez ouvrir la fenêtre « Variables » via le menu Fenêtres => Débogage => Variables ou via le raccourcis ALT + MAJ + 1. Et vous devriez avoir ceci en bas de l’ide :

Bien, il ne vous reste plus qu’à appuyer sur le bouton ] et de regarder ce qu’il se passe.

Normalement, Netbean lance le navigateur vers notre page web en mettant en argument ?XDEBUG\_SESSION\_START=netbeans-xdebug. Il envoie au serveur web que nous commençons une session de debug avec l’idekey netbeans-xdebug. Du côté de l’ide, on peut voir que le Curseur s’est positionné à l’entrée de notre balise PHP. (c’est la ligne verte).

En cliquant sur continuer , notre curseur s’arrête sur notre breakpoint et nous observons que notre variable $index change d’état.

Elle passe au type int avec comm valeur 0. Si on reclique sur continuer, on continue dans notre boucle et $index s’incrémente de 1. Voilà, avec cet exemple tout simple nous venons de voir comment debugger une application PHP.

Si vous avez un problème avec ce tutoriel, ou des questions, n’hésitez pas pas.