diff --git a/HowtoPHP.md b/HowtoPHP.md
index 992cd24d..307c87e1 100644
--- a/HowtoPHP.md
+++ b/HowtoPHP.md
@@ -447,6 +447,198 @@ $ git clone https://github.com/phalcon/phalcon-devtools.git -b 2.0.x /opt/phalco
# chmod ugo+x /usr/local/bin/phalcon
~~~
+## Debug
+
+### strace
+
+Au niveau système, pour voir exactement ce qui est fait. (Ouverture de fichiers, connexion distante, requêtes MySQL).
+Exemple d'utilisations.
+
+~~~
+# Affiche les fichiers ouverts.
+$ strace -ff -e trace=open php index.php
+# Affiche les appels réseaux.
+$ strace -ff -e trace=network php index.php
+# Compte les appels systèmes et le temps passé.
+$ strace -c php index.php
+# Calcul du temps d'exécution d'un appel.
+$ strace -T php index.php
+# Affichage d'un timestamp devant chaque appel.
+$ strace -ttt php index.php
+# Strace verbeux.
+$ strace -s 65535 -ff php index.php
+~~~
+
+Dans certains cas, des CMS gèrent mal le fait qu'on exécute le code via PHP-CLI. On pourra utiliser PHP-CGI pour le tromper, c'est notamment le cas de Magento.
+
+~~~
+$ HTTP_HOST="www.monsite.com" strace php-cgi index.php
+~~~
+
+Par exemple, peut récupérer les requêtes MySQL ainsi.
+
+~~~
+$ strace -s65535 -e trace=write -ff -o strace php-cgi index.php
+$ grep SELECT strace.*
+~~~
+
+### xdebug
+
+
+
+[Xdebug](https://xdebug.org/) est un débogueur PHP.
+
+~~~
+# aptitude install php5-xdebug
+~~~
+
+Pour l'activer, dans _/etc/php5/conf.d/xdebug.ini_ :
+
+~~~
+zend_extension=/usr/lib/php5/20090626/xdebug.so
+;xdebug.auto_trace=On
+;xdebug.profiler_enable=1
+xdebug.profiler_output_dir=/home/xdebug
+xdebug.trace_output_dir=/home/xdebug
+~~~
+
+Pour activer dans un vhost Apache :
+
+~~~
+php_admin_value xdebug.profiler_enable 1
+~~~
+
+Attention, bien mettre le bon chemin de l'extension zend (dépend de votre version PHP) et les droits sur le répertoire _/home/xdebug_. Notez qu'il peut se remplir très vite une fois activé !
+
+On obtient des fichiers _trace.XXX.xt_ et _cachegrind.out.XXXX_
+
+Le fichier xt est une trace de tout les appels aux fonctions PHP du code préfixé par le temps d'exécution. Idéal pour trouver une fonction anormalement longue.
+La seconde colonne contient l'empreinte mémoire, idéal aussi pour répérer une fonction qui utilise trop de mémoire.
+
+Le fichier _cachegrind_ peuvent être lus avec l'outil kcachegrind (pour Linux) ou wincachegrind (sous Windows), cela permet de schématiser les appels aux fonctions PHP et de voir le temps passé en % et le nombre d'appels.
+Voici un exemple :
+
+[[Image(call1.png)]]
+
+Ici, 30% du temps est passé dans php::uasort, appelé par Mage_Core_Model_Layout->getOutput.
+
+Webgrind en PHP permet de faire comme kcachegrind mais via un navigateur.
+
+~~~
+$ git clone
+~~~
+
+Puis dans le fichier de configuration config.php on mettre profilerDir à /home/xdebug. Il faut aussi installer le package graphviz et mettre dotExecutable à /usr/bin/dot si on veut profiter du graphique « call graph ».
+
+### coredump
+
+
+
+Installation :
+
+~~~
+# aptitude install gdb php5-dbg
+# echo 1 > /proc/sys/kernel/core_uses_pid
+~~~
+
+Note : En Squeeze il est nécessaire d'utiliser le gdb de squeeze-backports.
+
+Pour activer :
+
+~~~
+# mkdir /home/coredump
+# chmod 1777 /home/coredump
+# echo '/home/coredump/core-%e-%p' > /proc/sys/kernel/core_pattern
+# echo "* soft core unlimited" >> /etc/security/limits.conf
+# ulimit -c unlimited
+# echo "ulimit -c unlimited" >> /etc/default/apache2
+# /etc/init.d/apache2 restart
+~~~
+
+Pour désactiver :
+
+~~~
+# echo '' > /proc/sys/kernel/core_pattern
+~~~
+
+Pour lire les traces de PHP-FPM :
+
+~~~
+$ gdb /usr/sbin/php-fpm core-php5-fpm.7409
+
+(gdb) bt
+(gdb) bt -100
+~~~
+
+## Quelques messages typiques
+
+Erreurs de mémoire (souvent des boucles) :
+
+~~~
+#0 xbuf_format_converter (xbuf=0x77a812cee810, fmt=0xa6d5a1 "%ld", ap=Cannot access memory at address 0x77a812cedf10)
+
+#0 0x00007ffd348abe53 in _zend_mm_free_canary_int (heap=0x7ffd39b11130, p=0x21143c453bb97f0f) at /build/buildd/php5-5.3.2/Zend/zend_alloc_canary.c:2090
+2090 /build/buildd/php5-5.3.2/Zend/zend_alloc_canary.c: No such file or directory.
+ in /build/buildd/php5-5.3.2/Zend/zend_alloc_canary.c
+
+#0 0x00000000007e10b1 in zend_mm_free_cache ()
+~~~
+
+Astuce : utiliser xdebug pour en savoir plus sur la boucle (xdebug étant limité à 100 récursions, il affichera les infos via une PHP Fatal Error :
+
+~~~
+Fatal error: Maximum function nesting level of '100' reached, aborting! in [...]
+~~~
+
+
+## HHVM
+
+Doc officielle :
+
+
+
+~~~
+# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
+# echo deb jessie main > /etc/apt/sources.list.d/hhvm.list
+# apt update && apt install hhvm
+~~~
+
+Configuration via le fichier `/etc/hhvm/server.ini`
+
+On pourra passer en mode socket plutôt que sur un port TCP.
+
+~~~
+;hhvm.server.port = 9000
+hhvm.server.file_socket=/var/run/hhvm/sock
+~~~
+
+Mise en place avec Nginx :
+
+~~~
+# /usr/share/hhvm/install_fastcgi.sh
+# /etc/init.d/nginx restart
+~~~
+
+Cela crée le fichier /etc/nginx/hhvm.conf.
+
+~~~
+location ~ \.(hh|php)$ {
+ fastcgi_keep_conn on;
+ #fastcgi_pass 127.0.0.1:9000;
+ fastcgi_pass unix:/var/run/hhvm/sock
+ fastcgi_index index.php;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ include fastcgi_params;
+}
+~~~
+
+HHVM écoute par défaut sur le port 9000. (Attention si vous avez une configraution FPM qui écoute aussi sur ce port là).
+Il faudra inclure ce fichier de configuration dans votre vhost qui a besoin de HHVM.
+
+~~~
+include /etc/nginx/hhvm.conf;
+~~~
+
## FAQ