Aller au contenu principal

xDebug

Déboguer votre code PHP pas à pas avec xDebug

Petite vérification​

Avant de commencer, vérifiez si vous savez...

  1. trier un tableau $scores = [42, 15, 99, 7] par ordre décroissant avec usort() et une fonction anonyme utilisant l'opérateur <=>, puis afficher le tableau trié
  2. filtrer ce même tableau $scores pour ne garder que les valeurs supérieures ou égales à 20, en utilisant une fonction fléchée (fn) plutôt qu'une closure classique
  3. écrire une classe Item avec une propriété id promue et déclarée readonly dans le constructeur, puis indiquer ce qui se passe si vous tentez de réassigner $item->id après la création de l'objet
📌 Réponse attendue

Notions théoriques​

xDebug est une extension PHP qui fournit des capacités de débogage avancées : exécution pas à pas, inspection de variables, points d'arrêt (breakpoints), et profilage des performances.

Sans xDebug, le débogage se limite à des var_dump() ou dump() dispersés dans le code. Avec xDebug, vous pouvez arrêter l'exécution à n'importe quelle ligne et inspecter l'état complet de l'application.

Modes de xDebug​

xDebug propose plusieurs modes configurables :

ModeUtilité
debugDébogage interactif pas à pas
profileProfilage des performances
coverageCouverture de code pour les tests
developAméliore les messages d'erreur (var_dump amélioré)

Prérequis​

xDebug doit être installé en tant qu'extension PHP. Sur une installation locale, la méthode la plus simple est via PECL :

pecl install xdebug

Pour vérifier que xDebug est actif :

php -v

La sortie doit contenir with Xdebug v3.x.x.

Configuration dans php.ini​

[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003

Exemple de mise en application​

Débogage avec VS Code​

  1. Installez l'extension PHP Debug dans VS Code.
  2. Créez le fichier .vscode/launch.json :
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
  1. Placez un breakpoint dans votre code (clic dans la marge gauche de l'éditeur).
  2. Lancez la configuration "Listen for Xdebug" dans VS Code (F5).
  3. Accédez à votre application dans le navigateur : l'exécution s'arrête au breakpoint.

Inspecter les variables​

Une fois arrêté sur un breakpoint, le panneau de débogage de VS Code affiche :

  • Variables : l'état de toutes les variables locales et globales
  • Call Stack : la pile d'appels
  • Watch : des expressions à surveiller en temps réel

Les commandes de navigation :

  • F5 : Continuer jusqu'au prochain breakpoint
  • F10 : Passer à la ligne suivante (step over)
  • F11 : Entrer dans une fonction (step into)
  • Shift+F11 : Sortir de la fonction actuelle (step out)

Test de mémorisation/compréhension​


Quel est le rôle principal de xDebug ?


Quel mode xDebug faut-il activer pour le débogage interactif ?


Sur quel port xDebug écoute-t-il par défaut (version 3) ?


Quelle commande VS Code permet d'entrer dans le corps d'une fonction lors du débogage ?


Comment vérifier que xDebug est correctement installé ?



TP pour réfléchir et résoudre des problèmes​

Configurez xDebug pour déboguer votre application Symfony

Étape 1 : Ajoutez la configuration xDebug dans votre php.ini en activant le mode debug.

[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003

Étape 2 : Créez le fichier .vscode/launch.json pour que VS Code écoute xDebug sur le port 9003.


Bonne pratique - Désactiver xDebug en production

xDebug ralentit significativement l'exécution PHP (parfois 3 à 5 fois). Ne l'activez jamais en production. Utilisez des variables d'environnement pour gérer les configurations différentes entre développement et production. En Symfony, la configuration php.ini peut varier selon le serveur : vérifiez avec php -i | grep xdebug.

📌 Une solution