Pré-requis sur le serveur distant :
Pré-requis sur le poste local :
Installer et activer l'extension `xdebug' :
# vi /etc/php5/apache2/conf.d/xdebug.ini zend_extension=/usr/lib/php5/20060613/xdebug.so
Configurer `xdebug' pour se connecter au debugger sur localhost:9000 :
# vi /etc/php5/apache2/conf.d/xdebug.ini zend_extension=/usr/lib/php5/20060613/xdebug.so [xdebug] xdebug.remote_autostart=Off xdebug.remote_enable=On xdebug.remote_host="localhost" xdebug.remote_post=9000 xdebug.remote_mode="req" xdebug.profiler_enable_trigger = 1
Redémarrer Apache pour prendre en compte les modifications :
# /etc/init.d/apache2 restart
Installer GEBEN dans votre répertoire `~/.emacs.d' :
$ cd ~/.emacs.d/ $ tar zxvf geben-0.26.tar.gz
Configurer Emacs pour charger GEBEN :
$ emacs ~/.emacs [...] (add-to-list 'load-path "~/.emacs.d/geben-0.26") (add-to-list 'load-path "~/.emacs.d/geben-0.26/tree-widget") (autoload 'geben "geben" "PHP Debugger on Emacs" t)
Recharger Emacs.
Se connecter sur le serveur Apache par SSH avec un RemoteForward pour rediriger le port 9000 du serveur vers le poste local :
$ ssh root@remote.example.net -R 9000:127.0.0.1:9000
Lancer GEBEN sur votre Emacs local :
M-x geben
Lancer votre page PHP à débugger en ajoutant la variable HTTP `XDEBUG_SESSION_START'. Exemple :
Emacs doit immédiatement ouvrir le fichier PHP exécuté et faire une pause.
A partir de là, vous pouvez exécuter pas-à-pas le code.
Vous pouvez taper `?' (ou `M-x geben-help') sur la session GEBEN pour voir l'aide et les commandes disponible pour faire les run/step-in/step-out/etc.
Pour positionner un breakpoint sur un fichier à une ligne précise, il faut ouvrir le fichier avec la commande `M-x geben-open-file' et placer le breakpoint en vous positionnant sur la ligne et en tapant `b'.
M-x geben-open-file Open file: file:///var/www/freedom/FDL/Class.Doc.php
Le chemin du fichier est rentré sous la forme `file:/ / /path/to/file.php' et le chemin est relatif à la machine distante.
Le fichier est alors transféré par le protocol DBGp et ouvert dans Emacs. Vous pouvez ensuite placer vos breakpoints et re-lancer l'exécution en tapant `g'. Le debugger s'arrêtera sur votre breakpoint lorsqu'il passera sur le fichier.
Pour effectuer une trace de profilage, on peut utiliser xdebug pour générer la trace, et ensuite une interface comme Webgrind pour visualiser celle-ci.
Installer Webgrind :
# cd /var/www/freedom/admin/ # wget http://webgrind.googlecode.com/files/webgrind-release-1.0.zip # unzip webgrind-release-1.0.zip
Activer le profiling à la demande en positionnant le paramètre `xdebug.profiler_enable_trigger' à 1 :
# vi /etc/php5/apache2/conf.d/xdebug.ini ... [xdebug] xdebug.profiler_enable_trigger = 1 ... # /etc/init.d/apache2 restart
Exécuter la requête que vous voulez profiler en ajoutant l'argument `XDEBUG_PROFILER=1' à l'URL.
Exemple :
http://.../index.php?app=FDL&action=FDL_CARD&id=6485&XDEBUG_PROFILER=1
Se connecter ensuite sur Webgrind, et sélectionner la trace à visualiser :
http://.../admin/webgrind/index.php