Débogage d'une application PHP dans vi

De Wiki Valley - MediaWiki hosting and consulting
Le 13 mars 2018 – technique, PHP

Lors du développement d’une application, il est souvent utile de pouvoir analyser son comportement. Dans ce billet technique, nous allons voir comment déboguer un programme en PHP directement dans vi grâce à xdebug sur un serveur Ubuntu 16.04.

Installation côté serveur

On part du principe que PHP est déjà installé.

La première étape est d’installer xdebug :

sudo apt update
sudo apt install php-xdebug

Il faut ensuite le configurer pour permettre le débogage dans vi :

sudo vi /etc/php/7.0/fpm/conf.d/30-config-xdebug.ini
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1

Puis redémarrer le service PHP pour que la configuration soit prise en compte :

sudo service php7.0-fpm restart

Activer cette même configuration pour PHP CLI :

sudo ln -s /etc/php/7.0/fpm/conf.d/30-config-xdebug.ini /etc/php/7.0/cli/conf.d/30-config-xdebug.ini

Installation côté utilisateur

La deuxième étape est d’installer le plugin vdebug pour vi. Pour l’instant, en version 1.5.2, ce plugin nécessite vi avec le support de Python 2 (une version pour Python 3 est en cours de développement). Vous pouvez vérifier la version de Python supporté par votre installation vi avec la commande suivante :

vi --version

Dans les fonctionnalités activées, Python 2 doit être disponible (+python) et Python 3 désactivé (-python3). Si ce n’est pas le cas, vous pouvez installer vim-nox-py2 qui embarque Python 2 :

sudo apt install vim-nox-py2

Ensuite, il faut installer vdebug :

mkdir ~/git
cd ~/git
git clone https://github.com/joonty/vdebug.git
cd vdebug
git checkout tags/v1.5.2
cp -R ~/git/vdebug/plugin ~/.vim/.

Utilisation au quotidien

Enfin, il ne vous reste plus qu’à lancer vi :

vi

Puis lancer le débogage avec la touche <F5>. Ensuite, il faut lancer un script PHP (soit en chargeant une page web avec votre navigateur, soit en ligne de commande).

Dans vi, on a alors accès à un environnement de débogage complet, dont voici les principales commandes :

  • <F5> : démarrer / exécuter (jusqu’au prochain point d’arrêt ou à la fin du script)
  • <F2> : passer à la ligne suivante (step over)
  • <F3> : entrer dans le bloc (step into)
  • <F4> : sortir du bloc (step out)
  • <F6> : arrêter le débogage (arrête le script)
  • <F7> : détacher le script du débogueur
  • <F9> : exécuter jusqu’au curseur
  • <F10> : activer / désactiver le point d’arrêt sur la ligne courante
  • <F11> : afficher les variables de contexte (par exemple après un appel à eval)
  • <F12> : évaluer la variable sous le curseur
  • :Breakpoint <type> <args> : activer un point d’arrêt de n’importe quel type (voir :help VdebugBreakpoints)
  • :VdebugEval <code> : évaluer le code et afficher le résultat
  • <Leader>e : évaluer l’expression surlignée et afficher le résultat

Notes complémentaires

  1. Nous avons présenté ici le débogage avec vi comme interface utilisateur, mais de nombreux autres environnements de développement (IDE) supportent le protocole de débogage dbgp et peuvent être utilisés en alternative.
  2. La configuration xdebug présentée lance automatiquement le débogueur ; il est possible de n’activer celui-ci qu’au cas par cas, par exemple lorsqu’un cookie est envoyé ou une variable d’environnement active : voir la documentation Xdebug pour plus de détails.
  3. Pour des raisons de performance et de sécurité, il est déconseillé d’activer Xdebug dans des environnements de production.