Installer et utiliser Xdebug 3 pour VSCode et sous Windows
#1
Installer Xdebug 3
- Ouvrez une invite de commande : Touche
Windows + R
puis tapezcmd
. Tapezphp -i
puis copier le résultat et coller le dans l'assistant Xdebug (* Voir figure ci-dessous). - Demandez l'analyse.
- Téléchargez la librairie qui vous est proposée.
- Renommez-la en
php_xdebug
. - Copiez là dans le répertoire qui contient vos extensions PHP. Pour mon installation, c'est
C:\Program Files\PHP\ext
. - Ouvrez le fichier
php.ini
. Ajouter les lignes suivantes à la fin du fichier.Par rapport à
Xdebug 2
, peut-être que vous constaterez une différence concernant la valeur dexdebug.mode
. En fait pourXdebug 3
la valeurdebug
vous donne le "pas à pas" du débogueur et la valeurdevelop
vous permet d'avoir la surcharge duvar_dump
php et la mise en forme des messages d'erreurs. Vous avez les explications sur le setting des modes sur le site officiel xdebug.org. -
Maintenant passons à VSCode. Lancez-le et faites
CTRL+MAJ+X
pour accéder à la place de marché des extensions. Recherchez l'extensionXdebug
en tapant les mots-clésPHP Debug
. Il y a plusieurs résultats. Choisissez l'extension la plus populaire qui appartient àxdebug.org
. Installez là et c'est terminé 😉 .
#2
Qu'est-ce qu'une session de débogage avec un navigateur, un serveur et un IDE
- A droite du schéma ci-dessous, vous avez la partie IDE avec l'extension que nous avons installée.
- A gauche, vous avez la partie navigateur avec le serveur et son PHP avec la dll que nous avons installée.
- Les deux parties sont reliées par un canal de communication sur lequel circulent des informations qui supportent le protocole
DBGP
pour DeBuGer Protocol. 😄

- Côté IDE, lorsque l'on démarre une session de débogage, il va se mettre en attente d'une connexion sur un port du canal de communication.
- De l'autre côté, il va falloir prévenir le serveur qu'il doit faire une session de débogage et qu'il devra se connecter à l'IDE par le canal de communication. Il y a plusieurs moyens de faire ça. Le plus simple étant de mettre une variable dans l'URL au niveau du navigateur. On verra à la fin du tuto d'autres moyens pour faire ça.
#3
Session de débogage avec le navigateur
- Créez un répertoire
Test-Xdebug
. Ouvrez VSCode. Créez un fichierindex.php
. Copiez / Collez le code ci-dessous dans le fichier. - Démarrage du serveur. Bien sûr, il nous faut un serveur pour exécuter notre code. Je vais prendre le serveur interne à PHP. Pour cela, j'ouvre le terminal VSCode et je tape
php -S localhost:4000
. Le choix du numéro de port est arbitraire. - Démarrage du débogueur. Maintenant, cliquez sur l'icône de gauche
Exécuter et Déboguer
(*Figure ci-dessous en 1). Vous avez un raccourci pour le faire,CTRL+MAJ+D
. Lors de la première session de débogage sur un projet, il vous faudra créer un fichierlaunch.json
(* Figure ci-dessous en 2). Ce fichier est créé dans le dossier.vscode
. Il doit être créé pour chaque projet. Il contient plusieurs configurations de lancement de l'IDE. On y trouve notamment le numéro de port, à savoir9003
, sur lequel l'IDE attend la connexion du serveur. - Mise en place des points d'arrêt. Je vais les mettre sur les lignes 14, 16 et 19. Vous avez la figure ci-dessous.
- Choix du type de session de débogage. Vous pouvez déboguer avec le navigateur, mais vous pouvez aussi, si c'est possible, déboguer avec la console de débogage. Si vous déboguez avec le navigateur, vous avez les résultats de l'exécution dans le navigateur. Si vous déboguez avec la console de débogage, eh bien, vous avez les résultats de l'exécution dans la console de débogage.
- Démarrage de la session de débogage. Vous pouvez utiliser le raccourci
F5
ou passer par le menuExécuter
ou cliquez sur le triangle vert (* voir figure de dessus). A ce stade, l'IDE attend la connexion du serveur. La barre de status est passée en orange. Le panneau de contrôle du débogueur est apparu, mais il est inactif. - Lancement du navigateur. Il faut le lancer en mettant une variable
XDEBUG_SESSION
égale à une valeur quelconque. C'est par ce moyen que vous prévenez le serveur qu'il doit faire une session de débogage et qu'il doit communiquer avec l'IDE. Il va communiquer avec l'IDE en utilisant laphp_xdebug.dll
que nous avons installée. Si vous ne mettez pas la variable, il ne communiquera pas et il exécutera la requête. Et vous, vous demanderez pourquoi ça ne marche pas ! 🤔

Ci-dessous description des icônes de contrôle du pas à pas






- Je vais cliquer sur
Continuer
pour aller de la ligne14
à la ligne16
. Vous voyez que là, je ne fais pas du pas à pas, je fais du point d'arrêt à point d'arrêt. Et s'il n'y a plus de point d'arrêt, je vais jusqu'au bout. - Maintenant, je clique sur
Step Over
ou surStep in
pour passer de la ligne16
à la ligne17
. Je fais encore unstep in
pour aller à la ligne 19 devant l'appel de la fonction. Observez la valeur des variables dans la fenêtre de gauche. - Je clique sur
Step in
pour descendre dans la fonctionf1
. Puis encore unStep in
pour descendre dansf2
puis encore un pour descendre dansf3
. Regardez la pile des appels. - Maintenant, je veux sortir de
f3
, je fais donc unstep out
et vous voyez que je retourne juste en dessous de l'appel àf3
. - Je fais deux
step out
pour remonter à la fin def2
, puis à la fin def1
. - L'exécution est terminée. Regardez le résultat dans le navigateur. Grâce au mode
develop
(* ligne xdebug.mode=debug,develop du php.ini), vous avez la mise en forme des erreurs et l'amélioration duvar_dump()
PHP 😃.

#4
Session de débogage avec la console de débogage
Au moment de lancer la session de débogage dans l'IDE, il faut que je choisisse Launch currently open script
. Voir ci-dessous. Ensuite, je démarre l'exécution au moyen du panneau de contrôle. Par contre, je n'ai plus besoin de lancer le navigateur. Vous pouvez voir les résultats de l'exécution dans la console de débogage et c'est à cette condition que vous pouvez choisir ce type de session.

#5
Autres façons de déclencher la session de débogage côté serveur
- Au moyen du navigateur dans l'Url, à la place de
XDEBUG_SESSION
, vous pouvez utiliserXDEBUG_SESSION_START
. Ca va avoir pour effet de créer un cookie et tant que ce cookie existera alors le serveur démarrera en mode débogage. Pour supprimer le cookie, vous devrez faire une session avecXDEBUG_SESSION_STOP
ou bien effacer les cookies. - En configurant le serveur au niveau du
php.ini
. On peut démarrer systématiquement le serveur en mode débogage en mettant la directivexdebug.start_with_request = yes
. Donc là, littéralement, vous dites au serveur : démarre une session de débogage à chaque requête. Le problème, c'est que si du côté IDE, vous n'avez pas l'intention de faire une session de débogage, eh bien, il ne sera pas en attente de connexion et vous aurez un message d'erreur serveur (* Time-out connecting to debugging client). On peut aussi mettre la directivexdebug.start_with_request = trigger
. Dans ce cas, dans le code php il faut mettre l'instructionxdebug_break();
. - Il est aussi possible déboguer si vous utilisez php en ligne de commande. Dans ce cas, il faut avoir recours à une variable d'environnement Windows. Une variable utilisateur suffit.
- Enfin, il y a des extensions pour les navigateurs. Je n'ai pas eu de bons résultats avec celles que j'ai essayées 😬. Si la situation évolue, je mettrai à jour à ce moment-là 😆.
Je précise que je n'ai pas utilisé deux fonctionnalités importantes : la fonction trace
et la fonction profiler
. J'essaierai de faire ça dans d'autres tutoriels sur des exercices qui seront adaptés.