APD est un débogueur avancé pour PHP (Advanced PHP
Debugger). Il a été écrit pour fournir des capacités de profilage
et de déboguage du code PHP tout comme la possibilité d'afficher un
retour de trace de la pile. APD supporte le débogage interactif, mais, par
défaut, il écrit les données dans des fichiers de trace. APD fournit
également la notation basée par événement, de sorte que les niveaux
d'information (incluant les appels de fonctions, le passage d'arguments,
le délai d'exécution, etc.) peuvent être activer ou non pour chaque script.
Attention
APD est une extension Zend, qui modifie la façon interne de gestion des
appels de fonctions PHP et peut ou ne pas être compatible avec d'autres
extensions Zend (par exemple avec le Zend Optimizer).
APD est actuellement disponible en tant qu'extension PECL depuis
http://pecl.php.net/package/apd.
Assurez-vous d'avoir installé la version CGI de PHP et qu'elle soit
disponible dans votre PATH courant tout
au long de votre script PHP.
Exécutez la commande suivante pour télécharger, construire et installer la
dernière version stable d'APD :
pear install apd
Ceci installera automatiquement le module APD Zend dans votre dossier
d'extensions de PHP. Il n'est pas obligatoire de le conserver à cet endroit
; vous pouvez stocker le module dans n'importe quel dossier que PHP peut
lire, Ã partir du moment où vous paramétrez correctement le paramètre
zend_extension.
Pour compiler APD sous Windows, vous avez besoin d'un environnement
de compilation PHP comme décrit sur http://php.net/ -- simplement,
cela nécessite que vous possédiez Microsoft Visual C++, win32build.zip,
bison/flex certains savent comment les récupérer et les faire fonctionner.
Assurez-vous également que adp.dsp a bien des
fins de lignes façon DOS ; si les fins de lignes sont du style Unix,
Microsoft Visual C++ vous le fera remarquer.
À la première ligne de vos scripts PHP, appelez la fonction
apd_pprof_trace() pour commencer la trace :
apd_set_pprof_trace();
Vous pouvez ajouter cette ligne n'importe où dans votre script, mais si vous
ne commencez pas à tracer au début de votre script, vous désactivez les
données de profil qui pourraient autrement vous mener à un goulot
d'étranglement d'exécution.
Maintenant, exécutez votre script. Le contenu de la sortie devrait être
écrit dans le fichier apd.dumpdir/pprof_pid.ext.
Astuce :
Si vous utilisez la version CGI de PHP, vous devez ajouter le flag '-e'
pour activer les informations étendues pour que apd fonctionne
correctement. Par exemple :
php -e -f script.php
Pour afficher les données de profile formattées, exécutez la commande
pprofp avec les options de trie et d'affichage de votre
choix. L'affichage formattée pourra ressembler à cela :
bash-2.05b$ pprofp -R /tmp/pprof.22141.0
Trace for /home/dan/testapd.php
Total Elapsed Time = 0.00
Total System Time = 0.00
Total User Time = 0.00
Real User System secs/ cumm
%Time (excl/cumm) (excl/cumm) (excl/cumm) Calls call s/call Memory Usage Name
--------------------------------------------------------------------------------------
100.0 0.00 0.00 0.00 0.00 0.00 0.00 1 0.0000 0.0009 0 main
56.9 0.00 0.00 0.00 0.00 0.00 0.00 1 0.0005 0.0005 0 apd_set_pprof_trace
28.0 0.00 0.00 0.00 0.00 0.00 0.00 10 0.0000 0.0000 0 preg_replace
14.3 0.00 0.00 0.00 0.00 0.00 0.00 10 0.0000 0.0000 0 str_replace
L'option -R utilisée dans cet exemple trie la table de profil par la durée
réelle qu'une fonction donnée coûte au script. La colonne "cumm call"
révèle le nombre d'appel de chaque fonction et la colonne
"s/call", le nombre de secondes chaque appel à la fonction nécessite, en
moyenne.
Pour générer un fichier d'appel sous forme d'arbre que vous pourrez
importer dans l'application KCacheGrind (application d'analyse de
profile), exécutez la commande pprof2calltree.
Si vous avez des commentaires, des corrections de bogues ou si vous
voulez développer des améliorations pour cette extension, vous pouvez
envoyer un email Ã
apd@mail.communityconnect.com.
Toute aide est vraiment la bienvenue.
Table des matières
apd_breakpoint -- Stoppe l'interpréteur et attend un CR depuis le socket
apd_callstack -- Retourne la pile d'appel courante dans un tableau