Déboguer PHP avec Sublime Text 3

Vous pratiquez un langage compilé avec un éditeur tout cuit ? Vous aimez avoir des points d’arrêts partout et afficher la pile en temps réel ? Vous faites maintenant du php et vous n’utilisez que l’écran pour déboguer ?

OK stop, le PHP à beau être critiqué il a tout ce qui lui faut comme outils. En effet pas mal de gens n’utilisent pas tous les outils et dans le cas du piti PHP il y a plusieurs manières de faire ça:

  • Regarder les erreurs sur la page
  • Regarder les erreurs dans le log
  • Utiliser XDebug avec son ide préféré

Regarder les erreurs sur la page

Avant tout il faut savoir que l’affichage d’erreur est limité, donc sur votre machine de développement vous devez avoir XDebug d’installé (sudo apt-get install php5-xdebug && sudo php5enmod xdebug)
Cela vous permettra d’avoir un affichage plus complet notamment avec la pile d’appel. Mais il faut aussi dire à php d’afficher les erreurs, pour cela ouvrez votre php.ini : sudo nano /etc/php5/apache2/php.ini
Assurez-vous d’avoir

display_errors = On
error_reporting = E_ALL
html_errors = On

On redémarre ensuite Apache sudo service apache2 restart

Regarder les erreurs dans le log

Peu de gens ont tendent à le faire. Tout d’abord si vous travaillez sous Windows il y a peu de chance que vous utilisiez jamais la console (il faut dire que cmd est bien dégueulasse quand même), ensuite même sous mac on a pas mal tendance à cliquer mais il faut savoir qu’il a aussi une console. Alors quand vous testez quelque chose sur un serveur web, il enregistre des logs, dans /var/log/apache2 pour Apache. Il suffit de checker le fichier error.log .

Oui mais quels outils pour lire ce fichier de log ? Pour ça il faut se tourner vers le copain admin système qui vont nous dire “il faut utiliser tail“, ou alors il faut utiliser multitail. Il y en a sûrement d’autres, mais ce dernier est cool (sudo apt-get install multitail). Vous l’utilisez comme un éditeur de texte mais vous lui donnez à manger tous les fichier de log que vous voulez.

multitail sur terminator

multitail sur terminator

L’utilisation de base : il regarde les modifications des fichiers et en appuyant sur enter vous pouvez marquer un bandeau avec un timestamp. Le fichier du dessus est l’accès d’un virtual host et celui du dessous et l’error du même. Celui dans une seule fenêtre dans une seule commande sans arguments. Rechargez la page voir s’ajouter des lignes, c’est joli hein ?

Utiliser Xdebug avec son IDE préféré (Sublime Text)

On a vu plus haut que ce module de php permet un affichage amélioré, mais il fait aussi d’autres choses (pas le café), et il permet un débogage à distance avec un protocole que je ne connaît pas et sur un certain socket.

Donc deux chose:

Xdebug

Installer le : sudo apt-get install xdebug
Editez la configuration : sudo nano /etc/php5/mods-available/xdebug.ini
Rajoutez les lignes suivante:

zend_extension=xdebug.so
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_log="/var/log/apache2/xdebug.log"
xdebug.idekey = "sublime.xdebug"

On a donc xdebug qui va écouter sur le socket TCP 127.0.0.1:9000
pour plus de renseignement regardez la doc http://www.xdebug.org/docs/all_settings

Activez le   : sudo php5enmod xdebug && sudo service apache2 restart

IDE préféré (Sublime Text)

Il faut avoir Sublime Text et Package control installé https://packagecontrol.io/installation

Install Xdebug on Sublime textEn suite tapez ctrl+maj+p et tapez xdebug pour installer l’extension  Maintenant il faut changer dans les réglages:

Sublime text xdebug setting drop down Voici les Les valeurs minimales que je vous conseille, si vous avez un petit machine vous pouvez réduire le max_depth qui correspond à quel profondeur vous pourrez explorer les variables, cependant elle dépends aussi de la profondeurs des objets que va envoyer xdebug.

 "ide_key": "sublime.xdebug",
"port": 9000,
"close_on_stop": true,
"max_depth": 5,

Je vous conseille également de changer les raccourcis qui par défaut sont .. berk

{"keys": ["ctrl+&"], "command": "xdebug_breakpoint"},
{"keys": ["ctrl+shift+&"], "command": "xdebug_conditional_breakpoint"},
{"keys": ["ctrl+é"], "command": "xdebug_continue", "args": {"command": "run"}},
{"keys": ["ctrl+\""], "command": "xdebug_continue", "args": {"command": "step_over"}},
{"keys": ["ctrl+'"], "command": "xdebug_continue", "args": {"command": "step_into"}},
{"keys": ["ctrl+("], "command": "xdebug_continue", "args": {"command": "step_out"}},
{"keys": ["ctrl+alt+&"], "command": "xdebug_session_start"},
{"keys": ["ctrl+alt+é"], "command": "xdebug_session_stop"},

Explications :

Démarrer le débogage          : ctrl+altl+&
Arrêter le débogage           : ctrl+alt+é
Mettre un point d'arrêt       : ctrl+&
Point d'arrêt conditionnel    : ctrl+maj+&
Continuer                     : ctrl+é
Pas suivant                   : ctrl+"
Pas suivant intérieur         : ctrl+'
Pas suivant extérieur         : ctrl+(

C’est quand même plus agréable !

Par contre vous aurez un bug sûrement un bogue : https://github.com/martomo/SublimeTextXdebug/issues/85
Et l’auteur n’a pas l’air d’avoir envie de le résoudre, alors la solution:

preference->browse packages, puis allez dans XDebug Client > xdebug et ouvrez le fichier view.py

Sublimte Text XDebug Client correction

Remplacez le contenu du fichier par celui-ci https://raw.githubusercontent.com/Kwaadpepper/SublimeTextXdebug/3889aadc816f9e28901f9172cd3481ad14d5bf53/xdebug/view.py

Puis fermez et rouvrez Sublime Text, maintenant activer et déactiver XDebug ne vous fera plus changer d’onglet.

Oui mais c’est chiant je dois retourner sur mon navigateur pour recharger la page !

La solution c’est d’utiliser https://github.com/gcollazo/BrowserRefresh-Sublime

Puis rajouter dans preference->Keybindings->User

    {
        "keys": ["ctrl+shift+r"], "command": "browser_refresh", "args": {
            "auto_save": true,
            "delay": 0.6,
            "activate": false,
            "browsers" : ["firefox"]
        }
    },

Vous aurez alors a avoir Firefox ouvert sur le bon onglet, puis a faire ctrl+maj+r, pour lancer le débogage sans quitter SublimeText ! Si c’est pas dla balle ça ?
Petite précision le delay sert à attendre après avoir sauvegardé le ficher, ça vous permettra par exemple d’attendre une éventuelle compilation si vous utilisez sass avant de recharger la page.

Attention n’appliquez rien de cet article sur un serveur en production hein 😉

Jérémy

Développeur et adepte GNU/Linux
Partager à l'aide d'un réseau social (<a href="/a-propos" alt="En savoir plus sur l'utilisation de cette fonctionnalité">*</a>)
  •  
  •  
  •  
  •  
  •  
  •  
  •  
0 0

Poster un Commentaire

Soyez le premier à commenter !

avatar
wpDiscuz