Débugger PHP en CLI avec Xdebug & Vim

Débugger PHP en CLI avec Xdebug & Vim

Date de publication : 9 février 2016

L’objectif de cet article est de vous présenter un moyen de débugger relativement simplement des scripts PHP directement sur un serveur sur lequel vous êtes connecté à distance via SSH.

Crash course

 

Introduction

Formidable outil permettant de debugger pas à pas, Xdebug est très apprécié pour son intégration dans quantité d’IDE: phpStorm, Atom, NetBeans, Sublime Text, etc. Généralement, on active Xdebug sur son serveur, et en configurant son IDE, on est capable de débugger à distance un script qui tourne sur une requète Http. Mais comment faire, dans le cas de l’execution d’un script en cli, pour débugger en local.

Exemple via ssh sur un serveur distant.

Prérequis concernant le serveur sur lequel vous voulez débugger :

  • Debian Wheezy ou Jessie
  • Php 5.3 minimum
  • Vim, compilé avec le support de Python comme langage de script (fournis sous debian par le paquet vim-nox)
  • Xdebug
  • Git (optionnel)

Xdebug, donne moi la puissance….

Nous allons utiliser une configuration un peu particulière pour le Xdebug que vous avez installé.
Elle passe Xdebug en débuggeur pas à pas, mais pour interagir avec un client en local.
Ouvrez le fichier .ini relatif à votre configuration : /etc/php5/cli/php.ini ou /etc/php5/cli/conf.d/20-xdebug.ini .
Vous devez vous assurez qu’y figurent les lignes suivantes:

 

La documentation officielle de Xdebug vous donnera toutes les options de configuration.

Vim ma vie de développeur

Le plugin Vdebug (écrit en python) interface Vim avec n’importe quel debuggueur utilisant le protocole DBGP, pour Php (ici, Xdebug), Python, Ruby, Perl ou encore NodeJs. Son rôle : transformer ici vim en client Xdebug.

Les gestionnaires de plugins offrent une facilité d’installation et de gestion. Nous allons pour notre part utiliser Pathogen. Il s’installe ainsi :

Pathogen est maintenant installé dans ~/.vim/autoload/pathogen.vim.
Les quelques lignes au dessus créent les dossiers suivants :

  • ~/.vim/autoload, dans lequel se trouve pathogen,
  • ~/.vim/bundle, dans lequel nous allons placer nos plugins pour vim

En l’occurence nous allons y ajouter vdebug :

Maintenant, reste à éditer le .vimrc de votre utilisateur :

Pour valider l’installation de vdebug, ouvrez un script avec vim et appuyez sur F5. Si tout s’est bien passé le message  » Waiting for a connection (Ctrl-C to cancel, this message will self-destruct in 20 seconds…) » devrait s’afficher.
Et maintenant, testons!

Vdebug ain’t afraid of no bug !

Nous allons travailler dans un environnement Terminator avec 2 terminaux l’un à côté de l’autre.

Vous êtes connecté en SSH sur le serveur dans un premier panneau. Indiquez à Xdebug votre idekey:

Ouvrez le script que vous souhaitez débugger avec vim, dans un second panneau.

Vdebug s’utilise de la manière suivante:

  • <F10> pour poser un point d’arrêt
  • <F5> pour lancer une session xdebug
  • <F6> pour quitter une session xdebug

Placez un point d’arrêt, puis lancez une session xdebug avec F5.

Vdebug - point d'arret

Lançons le script:

Si tout se passe bien, un nouvel onglet s’ouvre automatiquement dans vim, avec 4 panneaux:

Vdebug

  • Le panneau de gauche, c’est votre script : la ligne rouge représente l’execution en cours, les lignes vertes vos points d’arrêt
  • Sur votre droite, trois panneaux:
    • En haut, l’état des variables
    • Au milieu, le stack
    • En bas, l’état de xdebug

Tips :

Utilisation des onglets dans vim

Pour ouvrir plusieurs fichiers dans vim, lancez

Dans vim, pour ouvrir un fichier dans un nouvel onglet, lancez :

Naviguez entre les onglets avec gt pour passer à l’onglet de droite, et gT pour l’onglet de gauche. Entrez :q pour quitter un onglet.

Utiliser la souris dans vim

Pour pouvoir redimensionner les panneaux dans l’onglet de débug, utilisez votre souris en lançant sur vim:

Cette commande active le support de la souris pour tous les modes de vim. Attention, il n’est disponible que si vous utilisez un terminal type xterm.  Pour désactiver l’option :

Obtenez plus d’informations concernant le support de la souris avec la commande:

En cours de session, différentes commandes à retenir:

  • <F5> Passer au prochain point d’arrêt
  • <F2> Passer à la prochaine instruction
  • <F3> Rentrer dans l’instruction
  • <F4> Sortir de l’instruction
  • <F6> Arrêter la session

Pour obtenir plus d’information sur vdebug, lancez dans vim:

 

Liens utiles

 

Happy debugging!