Le débogueur interactif PHP étape par étape implémenté comme un module SAPI qui peut vous donner un contrôle complet sur l'environnement sans impact sur la fonctionnalité ou les performances de votre code. Il vise à être une plate-forme de débogage légère, puissante et facile à utiliser pour PHP 5.4+ et il est livré avec PHP 5.6.
Les fonctionnalités incluent:
- Débogage pas à pas
- Points d'arrêt flexibles (méthode de classe, fonction, fichier: ligne, adresse, code d'opération)
- Accès facile à PHP avec eval intégré ()
- Accès facile au code en cours d'exécution
- API Userland
- SAPI Agnostic - Facilement intégré
- Prise en charge des fichiers de configuration PHP
- JIT Super Globals - Définissez le vôtre !!
- Prise en charge de la ligne de lecture en option - Fonctionnement confortable du terminal
- Prise en charge du débogage à distance - Interface graphique Java intégrée
- Opération facile
Voir les captures d'écran:
Page d'accueil: http://phpdbg.com/
Erreur PHP - Meilleur rapport d'erreurs pour PHP
C'est une bibliothèque très facile à utiliser (en fait un fichier) pour déboguer vos scripts PHP.
La seule chose que vous devez faire est d'inclure un fichier comme ci-dessous (au début sur votre code):
require('php_error.php');
\php_error\reportErrors();
Ensuite, toutes les erreurs vous donneront des informations telles que la trace, le contexte du code, les arguments de fonction, les variables de serveur, etc. Par exemple:
Les fonctionnalités incluent:
- trivial à utiliser, c'est juste un fichier
- erreurs affichées dans le navigateur pour les requêtes normales et ajaxy
- Les requêtes AJAX sont suspendues, vous permettant de les réexécuter automatiquement
- rend les erreurs aussi strictes que possible (encourage la qualité du code et tend à améliorer les performances)
- extraits de code sur toute la trace de la pile
- fournit plus d'informations (telles que les signatures de fonctions complètes)
- corrige certains messages d'erreur qui sont tout simplement faux
- coloration syntaxique
- semble joli!
- personnalisation
- allumer et éteindre manuellement
- exécuter des sections spécifiques sans rapport d'erreur
- ignorer les fichiers vous permettant d'éviter de mettre en évidence le code dans votre trace de pile
- fichiers d'application; ceux-ci sont prioritaires en cas d'erreur!
Page d'accueil: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Ma fourchette (avec correctifs supplémentaires): https://github.com/kenorb-contrib/PHP-Error
Si votre système prend en charge le traçage dynamique DTrace (installé par défaut sur OS X) et que votre PHP est compilé avec les sondes DTrace activées ( --enable-dtrace
) qui devraient être par défaut, cette commande peut vous aider à déboguer le script PHP sans délai:
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
Donc, étant donné que l'alias suivant a été ajouté à vos fichiers rc (par exemple ~/.bashrc
, ~/.bash_aliases
):
alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'
vous pouvez tracer votre script avec facile à retenir alias: trace-php
.
Voici un script dtrace plus avancé, il suffit de l'enregistrer dtruss-php.d
, de le rendre exécutable ( chmod +x dtruss-php.d
) et de l'exécuter:
#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d
#pragma D option quiet
php*:::compile-file-entry
{
printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}
php*:::compile-file-return
{
printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}
php*:::error
{
printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::exception-caught
{
printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::exception-thrown
{
printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::execute-entry
{
printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::execute-return
{
printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::function-entry
{
printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::function-return
{
printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::request-shutdown
{
printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
php*:::request-startup
{
printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
Page d'accueil: dtruss-lamp chez GitHub
Voici une utilisation simple:
- Run:
sudo dtruss-php.d
.
- Sur une autre course terminal:
php -r "phpinfo();"
.
Pour tester cela, vous pouvez aller dans n'importe quel docroot avec index.php
et exécuter le serveur PHP intégré en:
php -S localhost:8080
Après cela, vous pouvez accéder au site à http: // localhost: 8080 / (ou choisir le port qui vous convient). De là, accédez à certaines pages pour voir la sortie de trace.
Remarque: Dtrace est disponible sur OS X par défaut, sous Linux, vous avez probablement besoin de dtrace4linux ou recherchez d'autres alternatives .
Voir: Utiliser PHP et DTrace sur php.net
Vous pouvez également vérifier le suivi SystemTap en installant le package de développement SystemTap SDT (par exemple yum install systemtap-sdt-devel
).
Voici un exemple de script ( all_probes.stp
) pour tracer tous les points de sonde statiques PHP principaux pendant toute la durée d'un script PHP en cours d'exécution avec SystemTap:
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
printf("Probe compile__file__entry\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
printf("Probe compile__file__return\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
printf("Probe error\n");
printf(" errormsg %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
printf("Probe exception__caught\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
printf("Probe exception__thrown\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
printf("Probe execute__entry\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
printf("Probe execute__return\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
printf("Probe function__entry\n");
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
printf("Probe function__return: %s\n", user_string($arg1));
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
printf("Probe request__shutdown\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
printf("Probe request__startup\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
Usage:
stap -c 'sapi/cli/php test.php' all_probes.stp
Voir: Utiliser SystemTap avec PHP DTrace Static Probes sur php.net