Débugger un projet PHP Symfony en 2021

Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter — Edsger Dijkstra

Vous l'avez compris, quel que soit votre niveau, vos années d'expérience, le language de programation que vous allez utiliser, une partie de votre quotidien consistera à débugger du code source.

Une anomalie peut être compliquée à trouver, comme parfois l'aguille dans une botte de foin : elle peut déprendre de nombreux paramètres, d'un contexte d'exécution particulier, de la présence (ou non) de certaines données, d'effets de bords, de «edges cases», et pourtant...

Pourtant il n'est pas rare (pas vous hein, votre voisin) de faire un echo "coucou;" die(); pour essayer d'y voir plus clair dans tout ce sac de noeud...

Bien entendu, il existe des outils, tels que Xdebug, qui permettent bien mieux qu'un dump() de tracer le comportement de votre projet PHP pour identifier et résoudre les anomalies.

Dans cet article, nous allons voir comment mettre en place un debug comme dans la vraie vie, avec #php, #symfony, (#symfony-cli | #docker), (#phpstom | #VSCode)

Première étape : installer Xdebug

Avec Docker

Pour disposer de Xdebug dans votre conteneur, il vous suffira d'ajouter ces lignes à votre Dockerfile

FROM php:7.4-fpm # Version de PHP que vous voulez
RUN pecl install -f xdebug \
        && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)\nxdebug.mode=debug\nxdebug.start_with_request=yes" > /usr/local/etc/php/conf.d/xdebug.ini;
 

Penser également à ajouter ces deux variables d'environnement à votre conteneur:

environment:
  - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9000
  - PHP_IDE_CONFIG=serverName=acseo-docker

Sans Docker

Pour disposer de Xdebug avec PHP, il vous suffira de l'installer vie pecl

# Avec Symfony CLI
$ symfony pecl install -f xdebug
# Sans Symfony CLI
$ pecl install -f xdebug

Deuxième étape : utiliser XDebug sur votre projet

Avec Visual Studio Code

Installation des extensions

Installer l'extension PHP Debug. Et voilà !

Il ne vous reste plus qu'à vous placer sur la vue Debug à gauche de l'IDE, puis de vous rendre dans le menu Run > Start Debugging.

Pensez à désactiver les breakpoints inutiles dans le menu en bas à gauche de l'écran.

Debug VSCode
{
    "version": "0.2.0",
    "configurations": [
    {
        "name": "Listen for XDebug",
        "type": "php",
        "request": "launch",
        "port": 9000,
        "pathMappings": {
            "/app": "${workspaceFolder}"
        },
        "xdebugSettings": {
            "max_data": 65535,
            "show_hidden": 1,
            "max_children": 100,
            "max_depth": 5
        }
    }
    ]
}

En cas de besoins spécifiques, il est possible d'éditer le fichier .vscode/launch.json pour paramétrer comme vous le souhaitez le fonctionnement du debug

Avec PHPStorm

Vous utilisez PHPStorm, il est encore temps de changer pour un autre IDE. Si malgré tout vous persistez, voici les étapes à suivre pour Débugger votre projet.

Configurer un Server

Une fois votre projet lancé, rendez vous dans PHPStorm > Preferences > Languages & Frameworks > PHP > Servers

Puis configurer un serveur avec les caractéristiques suivantes :

  • Name : acseo-docker (important)
  • Host : localhost
  • Port : 80 (renseigné par défaut)
  • Debugger : XDebug (renseigné par défaut)
  • Cocher la case Use path mappings
  • Sur la ligne File / Directory correspondant à votre projet, renseigner la valeur /app dans la colonne absolute path on the server

PHPStorm Server Config

Ajouter une configuration

Rendez vous dans Run > Edit configurations.

Cliquer sur le + Add a new configuration et choisir PHP Remote Debug

Renseigner les paramètres suivants :

  • Name : symfony-stack-debug
  • Cocher la case Filter debug connection by IDE key
  • Server : sélectionner acseo-docker
  • IDE key : vous pouvez laisser vide, cette valeur n'est pas utilisée
Enregistrer en cliquant sur OK

PHPStorm Debug Config

Et voilà ! Il ne vous reste plus qu'à lancer le debug (Menu Run > symfony-stack-debug), à placer un point d'arrêt et à lancer votre navigateur.

PHPStorm Debug Run

Conclusion

Il est assez simple et rapide de mettre en place XDebug avec un environnement Docker et des IDE très répandus comme PHPStorm et Symfony.

L'utilisation de XDebug dans votre stack PHP7 FPM / XDebug / Symfony / Docker vous permettra de gagner un temps précieux pour comprendre l'origine de vos bugs à travers une exécution pas à pas de votre code.

L'essayer, c'est l'adopter 😉

Vous recherchez des experts Symfony, Contactez nous !

Une idée, un projet ? Nous sommes à votre disposition pour discuter.