Remote debugging PHP with Xdebug and Emacs+Geben

Pré-requis sur le serveur distant :

  • Un serveur distant avec Apache+PHP et l'extension Xdebug (http://xdebug.org/)
  • Un accès SSH sur ce serveur avec la possibilité de faire des forward de port (RemoteForward)

Pré-requis sur le poste local :

Configuration du serveur distant

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

Configuration du poste client de debuggage

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.

Session de debuggage

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.

Positionner un breakpoint sur un fichier

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.

Profiling PHP with Xdebug and Webgrind

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
contribution/dev/tooltips/emacs.txt · Dernière modification: 01/10/2010 14:49 par jerome.auge