Xdebug - Débogage PHP professionnel

Notre agenda

  1. Introduction au sujet.
  2. Téléchargement et installation de Xdebug sur votre ordinateur local (Mac OS X 10.6.6+, MAMP 2.1.1).
  3. Intégration avec PhpStorm.
  4. Pratiquer le débogage.

Ce dont vous aurez besoin

  • Un Mac sous Mac OS X 10.6.6+.
    • Si vous êtes sur 10.8.X vous peut besoin d'installer XQuartz car Apple a supprimé X11.
    • Si vous êtes sur Windows, le processus entier est un peu plus facile, il suffit de cliquer sur Google pour plus de détails.
  • Apple Xcode 4.6 (gratuit sur le Mac App Store).
    • Outils de ligne de commande.
  • Homebrew.
  • Une application de terminal de votre choix.
  • PhpStorm 5+ (beaucoup d'autres IDE fonctionneront aussi).

Qu'est-ce que Xdebug??

Eh bien, techniquement, Xdebug est une extension pour PHP qui vous simplifie la vie lors du débogage de votre code. À l'heure actuelle, vous pouvez être habitué à déboguer votre code avec diverses autres solutions simples. Ceux-ci incluent l'utilisation écho instructions à différents états dans votre programme pour savoir si votre application respecte une condition ou pour obtenir la valeur d'une variable donnée. En outre, vous pouvez souvent utiliser des fonctions telles que var_dump, print_r ou d'autres pour inspecter des objets et des tableaux.

Ce que je rencontre souvent, ce sont de petites fonctions d’aide, comme celle-ci par exemple:

fonction dump ($ value) echo '
'; var_dump ($ value); écho '
';

La vérité est, je faisais cela aussi, pendant très longtemps en fait.

La vérité est que je le faisais aussi depuis très longtemps. Alors qu'est-ce qui ne va pas avec ça? Techniquement, il n’ya rien de mal à cela. Cela fonctionne et fait ce qu'il devrait faire.

Mais imaginez un instant que, au fur et à mesure de l'évolution de vos applications, vous pourriez prendre l'habitude de saupoudrer votre code de petits échos, var_dumps et débogueurs personnalisés. Cela dit, cela n’est pas gênant pendant votre flux de travail de test, mais que se passe-t-il si vous oubliez de nettoyer une partie de ce code de débogage avant qu’il ne passe en production? Cela peut causer des problèmes assez inquiétants, car ces minuscules débogueurs peuvent même se retrouver dans le contrôle de version et y rester longtemps..

La question suivante est de savoir comment déboguer en production. Encore une fois, imaginez que vous surfiez sur l’un de vos services Web préférés et que tout à coup vous obteniez une grande quantité d’informations de débogage qui vous étaient présentées à l’écran. Maintenant, bien sûr, il peut disparaître après la prochaine actualisation du navigateur, mais ce n'est pas une très bonne expérience pour l'utilisateur du site..

Enfin, avez-vous déjà souhaité pouvoir consulter votre code, ligne par ligne, observer les expressions et même entrer dans un appel de fonction pour savoir pourquoi il génère une valeur de retour incorrecte??

Eh bien, vous devriez vraiment plonger dans le monde du débogage professionnel avec Xdebug, comme il peut résoudre tous les problèmes ci-dessus.


Configuration de MAMP

Je ne veux pas trop approfondir le processus de téléchargement et d'installation de MAMP sur un Mac. Au lieu de cela, je partagerai simplement avec vous que j'utilise PHP 5.4.4 et le port standard Apache (80) tout au long de cette lecture..


Votre première décision

Une note rapide avant de commencer à créer notre propre Xdebug via Homebrew: si vous voulez emprunter la voie la plus facile, MAMP est déjà livré avec Xdebug 2.2.0. Pour l'activer, ouvrez:

/Applications/MAMP/bin/php/php5.4.4/conf/php.ini

avec un éditeur de texte de votre choix, allez tout en bas et décommentez la dernière ligne en supprimant ;.

Les deux dernières lignes du fichier doivent ressembler à ceci:

[xdebug] zend_extension = "/ Applications / MAMP / bin / php / php5.4.4 / lib / php / extensions / no-debug-non-zts-20100525 / xdebug.so"

Maintenant, si vous vous demandez:

"Pourquoi voudrais-je choisir un moyen plus difficile que celui-ci?"

Et ma réponse à cela est que ce n'est jamais une erreur de regarder au-delà de votre bord et d'apprendre quelque chose de nouveau. Surtout en tant que développeur ces jours-ci, jeter un œil sur les tâches liées aux serveurs sera toujours utile à un moment donné. Promis.


Installer les outils Xcode et de ligne de commande

Vous pouvez obtenir gratuitement Apple Xcode sur le Mac App Store. Une fois que vous avez téléchargé, s'il vous plaît aller dans les préférences de l'application, appuyez sur le bouton "Téléchargements" onglet et installez le "Outils de ligne de commande" de la liste.


Installer Homebrew

Homebrew est un petit gestionnaire de paquetage soigné pour Mac OS X qui vous permet d'obtenir tout ce que Apple a laissé. Pour installer Homebrew, il suffit de coller la commande suivante dans votre terminal.

ruby -e "$ (curl -fsSkL raw.github.com/mxcl/homebrew/go)"

Sur un Mac, Homebrew sera le moyen le plus pratique d’installer Xdebug. Sous Linux cependant, le compiler vous-même est la meilleure solution. ce qui n'est pas si facile sur un Mac.

Astuce: il suffit aux utilisateurs de Windows de télécharger le * .dll fichier de Xdebug.org, placez-le dans le dossier XAMPP et ajoutez le chemin à leur php.ini fichier.

En tant que développeur PHP, vous devez désormais connaître le référentiel Github "homebrew-php" de Jose Gonzalez, qui contient de nombreuses "préparations" utiles. Si vous vous êtes déjà demandé comment installer PHP 5.4 manuellement, vous êtes au bon endroit..

Maintenant, si vous rencontrez des problèmes lors de l'installation de Homebrew, consultez le fichier Readme de Jose.

Pour compléter notre excursion Homebrew, nous voulons "exploiter" les formules de brassage de Jose en exécutant les commandes suivantes dans votre application de terminal:

brassage du robinet homebrew / dupes

Cela nous donnera des dépendances dont nous avons besoin pour les formules de Jose.

robinet de bière josegonzalez / homebrew-php

Terminé! Nous devrions maintenant être prêts à installer Xdebug confortablement, sur un Mac.


Installer Xdebug

De retour dans votre application de terminal, veuillez exécuter:

brasser installer php54-xdebug

Si vous utilisez PHP 5.3, remplacez simplement le "4" par un "3";)

L'installation prendra du temps. Ensuite, vous verrez une petite icône de bière et quelques instructions supplémentaires que vous pouvez ignorer..

Alors qu'est-ce qui vient de se passer? Homebrew a téléchargé tous les fichiers, y compris leurs dépendances, et les a construits pour vous. Comme je vous l'ai déjà dit, vous compiler sur un Mac peut s'avérer fastidieux. À la fin, nous avons eu une compilation fraîchement compilée xdebug.so situé à /usr/local/Cellar/php54-xdebug/2.2.1/.

Attention: Veuillez noter que Homebrew installera PHP 5.4 sur votre système au cours du processus. Cela ne devrait influer sur rien car il n'est pas activé sur votre système.

Pour enfin installer Xdebug, il suffit de suivre quelques étapes supplémentaires.

Changer de répertoire (CD) dans le dossier des extensions de MAMP:

cd / Applications / MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525

Vous pouvez revérifier le chemin en regardant la dernière ligne de /Applications/MAMP/bin/php/php5.4.4/conf/php.ini, comme c'est là que nous allons.

Sauvegarder l'existant xdebug.so Au cas où:

mv xdebug.so xdebug.so.bak

Ensuite, copiez votre version Homebrew Xdebug:

cp /usr/local/Cellar/php54-xdebug/2.2.1/xdebug.so /Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525/

Si vous voulez forcer une copie (cp) pour écraser des fichiers existants, faites juste cible source cp -X.

Dernier point, mais non le moindre, nous devons modifier le php.ini fichier pour charger le fichier d’extension Xdebug. Ouvrir /Applications/MAMP/bin/php/php5.4.4/conf/php.ini avec un éditeur de texte de votre choix, allez tout en bas et décommentez la dernière ligne en supprimant le point-virgule au début. Ne ferme pas le fichier pour l'instant.

Maintenant relancez MAMP, allez à http: //localhost/MAMP/phpinfo.php. Si tout s'est bien passé, vous devriez trouver ceci dans la sortie:


Si c'était le cas ne pas travailler, s'il vous plaît assurez-vous que vous avez vraiment copié sur le xdebug.so et avoir le droit chemin dans votre php.ini fichier.


Lancer le débogage

Avant de pouvoir commencer à déboguer, nous devons activer Xdebug. Par conséquent, j'espère que vous n'avez pas fermé votre php.ini, car nous devons ajouter cette ligne à la fin, après la zend_extension option:

xdebug.remote_enable = On

Enregistrez et fermez votre php.ini fichier et redémarrez MAMP. Aller à http: //localhost/MAMP/phpinfo.php encore et rechercher xdebug.remote sur le site. Vos valeurs devraient ressembler exactement aux miennes:


Si ce n'est pas le cas, suivez la même procédure que vous avez utilisée pour ajouter remote_enable = On pour les autres déclarations à la fin de votre php.ini fichier.

Maintenant, ouvrez votre IDE de choix. Vous pouvez utiliser Xdebug avec un certain nombre de solutions logicielles courantes telles qu'Eclipse, Netbeans, PhpStorm et également Sublime Text. Comme je l'ai déjà dit, je vais utiliser PhpStorm EAP 6 pour cette démonstration.

Dans PhpStorm, ouvrez les préférences de l’application et trouvez votre chemin pour "Proxy PHP \ Debug \ DBGp" sur le côté gauche, comme dans la capture d'écran ci-dessous:


Maintenant, choisissez votre clé IDE personnelle. Cela peut être n'importe quelle chaîne alphanumérique que vous voulez. Je préfère l'appeler PHPSTORM, mais XDEBUG_IDE ou mon nom serait parfaitement bien aussi. Il est important de définir le "Port" valeur à 9000 comme notre configuration standard Xdebug utilise ce port pour se connecter à l'IDE.

Conseil: si vous avez besoin d’ajuster cela, ajoutez xdebug.remote_port = numero de port à ton php.ini fichier.

Attention: d'autres composants peuvent changer cette valeur dans PhpStorm, alors méfiez-vous-en si quelque chose échoue.

Ensuite, cliquez sur le bouton rouge du téléphone avec un petit bug dans la barre d’outils. Il devrait devenir vert. Cela fait que PhpStorm écoute toutes les connexions Xdebug entrantes.


Nous devons maintenant créer quelque chose à déboguer. Créez un nouveau fichier PHP, appelez-le comme vous voulez et collez-le dans le code suivant:

 

Maintenant ce code est faux par défaut, mais nous le corrigerons dans un instant, dans la section suivante.

Assurez-vous que tout est enregistré et ouvrez votre navigateur avec le script que nous venons de créer. J'utiliserai Google Chrome pour cette démo, mais tout navigateur le fera..

Prenons maintenant un moment pour comprendre comment le processus de débogage est initialisé. Notre statut actuel est: Xdebug activé en tant qu’extension Zend, à l’écoute port 9000 pour qu'un cookie apparaisse lors d'une demande. Ce cookie portera une clé IDE qui devrait être identique à celle que nous avons configurée dans notre IDE. Lorsque Xdebug voit le cookie portant la demande, il essaiera de se connecter à un proxy, notre IDE.

Alors, comment pouvons-nous mettre ce cookie en place? PHP setcookie? Non. Bien qu'il y ait plusieurs façons, même certaines de le faire fonctionner sans cookie, nous utiliserons une petite extension de navigateur comme aide..

Installez le "Xdebug helper" "dans votre navigateur Google Chrome ou recherchez une extension qui le fera pour le navigateur que vous utilisez..

Une fois l'extension installée, cliquez avec le bouton droit sur le petit bogue apparaissant dans votre barre d'adresse et accédez aux options. Configurez la valeur de la clé IDE pour qu'elle corresponde à la clé que vous avez choisie dans votre IDE, comme suit:


Après l'avoir configuré, cliquez sur le bogue et sélectionnez "Déboguer" de la liste. Le bogue devrait virer au vert:


Maintenant, revenez à PhpStorm ou à l'IDE de votre choix et définissez un "point d'arrêt". Les points d'arrêt sont comme des marqueurs sur une ligne qui indiquent au débogueur d'interrompre l'exécution du script à ce point d'arrêt..

Dans PhpStorm, vous pouvez simplement ajouter des points d'arrêt en cliquant sur l'espace à côté des numéros de ligne sur le côté gauche:


Essayez simplement de cliquer à l'endroit où le point rouge apparaît sur la capture d'écran. Vous aurez alors un point d'arrêt défini auquel votre script devrait s'interrompre.

Remarque: vous pouvez avoir plusieurs points d'arrêt dans autant de fichiers que vous le souhaitez..

Maintenant nous sommes tous ensemble. Retournez sur votre navigateur, assurez-vous que le bogue est vert et rechargez simplement la page pour soumettre le cookie à la prochaine demande..

Astuce: si vous définissez un cookie, il sera disponible à la prochaine demande..

Si tout se passe comme prévu, cette fenêtre devrait apparaître à l'intérieur de PhpStorm pour vous informer d'une connexion de débogage entrante:


La fenêtre n'a-t-elle pas été ouverte pour vous? Faisons quelques dépannages et répétons ce qui doit être défini pour que cela réussisse:

  1. Vous devriez trouver des informations sur Xdebug dans phpinfo ()La sortie de. Si non, obtenez le xdebug.so déposer au bon endroit et configurer votre php.ini fichier.
  2. Définissez les paramètres PhpStorm DBGp sur votre clé IDE, par exemple. "PHPSTORM" et le port "9000".
  3. Faites en sorte que PhpStorm soit à l'écoute des connexions de débogage entrantes à l'aide de l'icône de téléphone rouge qui deviendra verte..
  4. Définissez un point d'arrêt dans votre code ou sélectionnez "Run \ Break à la première ligne dans les scripts PHP" être indépendant de tout point d'arrêt. Notez que cela ne convient pas pour une utilisation pratique.
  5. Obtenir une extension de navigateur pour définir le cookie Xdebug.
  6. Assurez-vous que l'extension de navigateur contient la même clé IDE que celle que vous avez choisie dans votre IDE..
  7. Rechargez la page et PhpStorm devrait obtenir la connexion.

Si vous obtenez le dialogue vu sur l'image précédente, veuillez l'accepter. Cela vous mènera en mode débogage, comme suit:


Vous pouvez voir que le débogueur a arrêté l'exécution du script à votre point d'arrêt, mettant en surbrillance la ligne en bleu. PHP est maintenant en attente et contrôlé par Xdebug, qui est désormais piloté de vos propres mains.

Notre espace de travail principal sera la partie inférieure de l'EDI qui affiche déjà des informations sur le script en cours d'exécution (les superglobales)..


Et voudriez-vous regarder ça? Il y a le cookie que nous venons de définir pour démarrer la session de débogage. Vous pouvez maintenant cliquer sur les superglobales et inspecter leurs valeurs en ce moment même. PHP est en attente, il n'y a pas de limite de temps, du moins pas les 30 secondes par défaut.

Sur le côté gauche, vous verrez quelques boutons. Pour l'instant, seulement "Jouer" et "Arrêtez" nous intéressent. Le bouton de lecture vert reprendra le script. S'il y a un autre point d'arrêt dans le code, le script continuera jusqu'à ce qu'il atteigne le point d'arrêt et s'arrête à nouveau..

Le bouton d'arrêt rouge interrompt le script. Tout comme PHP sortie ou mourir ferait.


Les plus intéressants se trouvent maintenant dans la partie supérieure de la fenêtre de débogage:


Vérifions-les rapidement:

  1. Enjamber: Cela signifie que vous avancez d'une ligne.
  2. Entrer dans: Si la ligne bleue met en évidence, par exemple, un appel de fonction, ce bouton vous permet de passer en revue les informations de la fonction.
  3. Sors: Si vous êtes entré dans une fonction et que vous voulez sortir avant que la fin ne soit atteinte, sortez simplement.
  4. Courir au curseur: Disons que, par exemple, votre fichier comporte 100 lignes et que votre point d'arrêt a été défini sur la ligne deux afin d'inspecter quelque chose. Maintenant, vous voulez aller rapidement au point où vous venez de cliquer sur votre curseur - ce bouton est pour vous. Vous pouvez cliquer "Enjamber" n fois aussi;)

Maintenant, ne vous inquiétez pas, en utilisant Xdebug, vous vous adapterez rapidement aux raccourcis clavier..


Déboguer un exemple de code

Je vous ai déjà dit que le code que vous copiez / colliez est faux, vous devrez donc le déboguer. Commencez à parcourir le code, déclaration par déclaration.

Notez que la ligne bleue ne s’arrête que sur les lignes contenant une commande. Les espaces et les commentaires seront ignorés.

Une fois la fonction appelée, appelez loadData, S'il vous plaît ne pas y entrer, juste passer et arrêter sur la si déclaration.


Vous pouvez voir deux nouvelles variables dans le "Variables" panneau en bas de l'écran. Maintenant, pourquoi le $ data variable return false? Il semble que le script aurait dû faire son travail. Nous allons jeter un coup d'oeil. Retournez à la ligne sept pour entrer dans l'appel de fonction -> bam! Nous recevons un message nous informant que nous ne pouvons pas "revenir en arrière". Pour que votre débogueur retrouve la ligne sept, vous devez arrêter cette session et recharger la page dans le navigateur. Faites-le et entrez dans l'appel de fonction cette fois.

Arrêtez le revenir déclaration à l'intérieur de la loadData fonctionner et voir ce qui s'est passé:


le $ phpData tableau est vide. le revenir instruction utilise un opérateur ternaire pour détecter les éléments à renvoyer. Et ça va revenir faux pour un tableau vide.

Fixez la ligne pour dire:

return $ phpData;

Comme json_decode renverra les données ou nul en cas d'échec. Maintenant, arrêtez la session de débogage, rechargez votre navigateur et passez l’appel de fonction cette fois..


Maintenant, il semble que nous ayons toujours un problème alors que nous entrons dans la situation. S'il vous plaît fixer la condition à utiliser is_null () pour détecter ce qui se passe:

if (is_null ($ data)) die ('Impossible de charger les données'); 

Maintenant, c’est à vous d’essayer de faire quelques pas. Je suggère de rétablir le script dans la version originale de Falsy, le déboguer avec échoet ensuite comparer comment cela se sent par rapport à l'utilisation de Xdebug.


Conclusion

Tout au long de cet article, vous devriez avoir acquis beaucoup de nouvelles connaissances. N'hésitez pas à le relire et à aider un ami à configurer Xdebug - rien de mieux que ça!

Vous voudrez peut-être essayer de remplacer votre comportement de débogage habituel en utilisant plutôt Xdebug. Surtout avec des projets plus importants et orientés objet, car ils deviennent beaucoup plus faciles à déboguer et même à rattraper le flux, si vous n'obtenez pas quelque chose immédiatement.

Notez que ceci n'est que la pointe de l'iceberg. Xdebug offre beaucoup plus de puissance qui doit également être explorée.

S'il vous plaît n'hésitez pas à poser des questions dans les commentaires et laissez-moi savoir ce que vous pensez.