Je cherche un moyen d'imprimer la pile d'appels en PHP.
Points bonus si la fonction vide le tampon IO.
php
stack-trace
error-logging
Justin
la source
la source
Réponses:
Si vous souhaitez générer une trace, vous recherchez
debug_backtrace
et / oudebug_print_backtrace
.Le premier vous donnera, par exemple, un tableau comme celui-ci (en citant le manuel) :
Apparemment, ils ne videront pas le tampon d'E / S, mais vous pouvez le faire vous-même, avec
flush
et / ouob_flush
.(voir la page de manuel du premier pour savoir pourquoi le "et / ou" ;-))
la source
DEBUG_BACKTRACE_IGNORE_ARGS
paramètres facultatifs ; ce qui les rend fonctionnellement équivalents à(new \Exception())->getTraceAsString()
Plus lisible que
debug_backtrace()
:la source
debug_backtrace
pour ne renvoyer que le premier niveau dans le stacktrace - cette solution fait le travail pour moi. Je vous remercie!print_r
conservera tous les messages.Pour enregistrer la trace
Merci @Tobiasz
la source
Backtrace vide un tas de déchets dont vous n'avez pas besoin. Cela prend très longtemps, difficile à lire. Tout ce que vous voulez habituellement, c'est "ce qui a appelé quoi d'où?" Voici une solution de fonction statique simple. Je le mets généralement dans une classe appelée «débogage», qui contient toutes mes fonctions utilitaires de débogage.
Vous l'appelez comme ceci:
Et il produit une sortie comme celle-ci:
la source
Étrange que personne n'ait publié de cette façon:
Cela imprime en fait la trace sans les ordures - juste quelle méthode a été appelée et où.
la source
Si vous voulez une trace de pile qui ressemble beaucoup à la façon dont php formate la trace de pile d'exception, utilisez cette fonction, j'ai écrit:
Cela retournera une trace de pile formatée comme ceci:
la source
$e = new Exception; echo $e->getTraceAsString();
Est-ce que ça fait ce que vous voulez?
la source
Tu vois
debug_print_backtrace
. Je suppose que vous pouvez appelerflush
après si vous le souhaitez.la source
phptrace est un excellent outil pour imprimer la pile PHP à tout moment quand vous le souhaitez sans installer d'extensions.
Il y a deux fonctions principales de phptrace: premièrement, imprimer la pile d'appels de PHP qui n'a pas besoin d'installer quoi que ce soit, deuxièmement, tracer les flux d'exécution de php qui doivent installer l'extension qu'il fournit.
comme suit:
la source
Utilisez
debug_backtrace
pour obtenir une trace des fonctions et méthodes qui ont été appelées et des fichiers qui ont été inclus et qui ont conduit au point où ilsdebug_backtrace
ont été appelés.la source
s'il vous plaît jeter un oeil à cette classe d'utils, peut être utile:
Usage:
Classe source: https://github.com/augustowebd/utils/blob/master/Who.php
la source
debug_backtrace()
la source
Vous voudrez peut-être examiner
debug_backtrace
, ou peut-êtredebug_print_backtrace
.la source
La solution de Walltearer est excellente, en particulier si elle est enfermée dans une étiquette «pré»:
- qui établit les appels sur des lignes distinctes, soigneusement numérotées
la source
J'ai adapté la réponse de Don Briggs ci-dessus pour utiliser la journalisation des erreurs internes au lieu de l'impression publique, ce qui peut être votre grande préoccupation lorsque vous travaillez sur un serveur en direct. En outre, quelques modifications supplémentaires comme l'option pour inclure le chemin de fichier complet au lieu du nom de base (car il pourrait y avoir des fichiers avec le même nom dans des chemins différents) et également (pour ceux qui en ont besoin) une sortie de pile de nœuds complète:
la source