Débogueur avancé pour PHP
Introduction
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 activés ou non pour chaque script.
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).
Installation
APD est actuellement disponible en tant qu'extension PECL depuis » https://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 configurez correctement le paramètre zend_extension.
Les utilisateurs de Windows peuvent télécharger la bibliothèque dll php_apd.dll depuis » https://snaps.php.net/win32/PECL_STABLE/.
Dans votre fichier INI, ajoutez les lignes suivantes :
zend_extension = /chemin/absolu/vers/apd.so apd.dumpdir = /chemin/absolu/vers/dossier/trace apd.statement_tracing = 0
En fonction de votre installation de PHP, le dossier zend_extension peut être l'un de la liste suivante :
zend_extension (non ZTS, non debug build) zend_extension_ts ( ZTS, non debug build) zend_extension_debug (non ZTS, debug build) zend_extension_debug_ts ( ZTS, debug build)
Compilation sous un environnement Win32
Pour compiler APD sous Windows, vous avez besoin d'un environnement de compilation PHP comme décrit sur https://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.
Configuration à l'exécution
Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.
Nom | Par défaut | Modifiable | Historique |
---|---|---|---|
apd.dumpdir | NULL | PHP_INI_ALL | |
apd.statement-tracing | "0" | PHP_INI_ALL |
Voici un éclaircissement sur l'utilisation des directives de configuration.
- apd.dumpdir chaîne de caractères
-
Spécifie le dossier dans lequel APD écrit les fichiers de profilage. Vous pouvez spécifier un chemin absolu ou relatif.
Vous pouvez spécifier un dossier différent comme argument de apd_set_pprof_trace().
- apd.statement_tracing boolean
-
Active ou désactive les traces à la ligne. En activant cette option (valeur de 1), l'application sera considérablement ralentie.
Types de ressources
Cette extension ne définit aucune ressource.
Constantes pré-définies
Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.
Constante | Valeur | Description |
---|---|---|
FUNCTION_TRACE (entier) | 1 | |
ARGS_TRACE (entier) | 2 | |
ASSIGNMENT_TRACE (entier) | 4 | |
STATEMENT_TRACE (entier) | 8 | |
MEMORY_TRACE (entier) | 16 | |
TIMING_TRACE (entier) | 32 | |
SUMMARY_TRACE (entier) | 64 | |
ERROR_TRACE (entier) | 128 | |
PROF_TRACE (entier) | 256 | |
APD_VERSION (string) | exemple : 1.0.2-dev |
Comment utiliser APD dans vos scripts ?
-
À 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.
TipSi vous utilisez la version CGI de PHP, vous devez ajouter le flag '-e' pour activer les informations étendues afin que apd fonctionne correctement. Par exemple :
php -e -f script.php
-
Pour afficher les données de profil formatées, exécutez la commande pprofp avec les options de tri et d'affichage de votre choix. L'affichage formaté 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'appels de chaque fonction et la colonne "s/call", le nombre de secondes que 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.
Informations de contact
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 message à » apd@mail.communityconnect.com. Toute aide est vraiment la bienvenue.
Table of Contents
- apd_breakpoint — Stoppe l'interpréteur et attend un CR depuis la socket
- apd_callstack — Retourne la pile d'appel courante dans un tableau
- apd_clunk — Lance une alerte et un callstack
- apd_continue — Redémarre l'interpréteur
- apd_croak — Lance une erreur, un callstack et sort
- apd_dump_function_table — Affiche la table courante de fonction
- apd_dump_persistent_resources — Retourne toutes les ressources persistantes dans un tableau
- apd_dump_regular_resources — Retourne toutes les ressources régulières courantes dans un tableau
- apd_echo — Ecrit dans la socket de débogage
- apd_get_active_symbols — Récupère un tableau contenant les noms des variables courantes de portée locales
- apd_set_pprof_trace — Démarre la session de débogage APD
- apd_set_session_trace — Démarre la session de débogage APD
- apd_set_session — Modifie ou définit le degré de débogage courant
- apd_set_socket_session_trace — Démarre la session de débogage à distance
- override_function — Dépasse les fonctions intégrées
- rename_function — Renomme une fonction intégrée dans la table des fonctions globales