Lorsque l'on développe on passe pas mal de temps à débugger son code et à rechercher la cause de certaines erreurs. Un bug est souvent causé par une variable ou une fonction qui n'a pas la valeur attendue et la recherche se fait souvent à grand coup de var_dump()
et de die()
.
Même si cette méthode est simple elle peu faire perdre pas mal de temps avec en plus le risque de laisser un var_dump
trainer lors de la mise en ligne.
Exécution pas à pas
Pour débugger plus efficacement notre code on préfère utiliser le principe de l'éxécution "pas à pas". Le but est de stopper l'éxécution de notre script à un instant "t" afin d'inspecter la valeur des différentes variables et mieux comprendre le contexte d'éxécution.
Avant de parler technique, un peu de terminologie :
- breakpoint ou point d'arrêt permet d'indiquer sur quelle ligne le script doit s'arréter pour être inspecté
- step over permet d'éxécuter la ligne courante et de s'arréter à la prochaine ligne
- step in permet de rentrer dans la fonction présente sur la ligne courante
- step out remonte vers la fonction parente à la fonction sous le curseur
- continue continue l'éxécution du script jusqu'au prochain point d'arrêt
Xdebug
Pour mettre en place l'éxécution pas à pas il va falloir commencer par activer l'extension php Xdebug.
- Si vous utilisez wamp sur windows xdebug est déjà installé
- Sur mac vous pouvez utiliser homebrew
brew install php70-xdebug
- Sur linux un simple paquet suffit
apt-get install php-xdebug
Une fois cette extension installée vous pouvez l'activer en modifiant le fichier php.ini
et en activant l'option xdebug.remote_enable
zend_extension=xdebug.so
; zend_extention="C:/chemin/pour/windows.dll" si vous êtes sur windows
xdebug.remote_enable=1
Si vous utilisez le serveur interne de PHP vous pouvez activer ces options directement gràce aux drapeau -d
php -S localhost:8080 -ddisplay_errors=1 -dzend_extension=xdebug.so -dxdebug.remote_enable=1
Une fois démarré avec ces options, PHP lancera l'écoute sur le port 9000 (par défaut) lorsqu'on lui demandera de démarrer une session Xdebug
- En ajoutant
?xdebug_session_start=dev
dans les paramètres - ou via un cookie (activable gràce à une extension par exemple)
Editeur
Maintenant il nous faut pouvoir contrôler notre éxécution pas à pas en ajoutant des breakpoints et il n'est pas forcément nécessaire de disposer d'un gros IDE pour cela :
- Sublime text 3
- Visual Studio Code, via
ext install php-debug
- Atom