Estoy buscando una manera de imprimir la pila de llamadas en PHP.
Puntos de bonificación si la función vacía el búfer IO.
php
stack-trace
error-logging
Justin
fuente
fuente
Respuestas:
Si desea generar una traza inversa, está buscando
debug_backtrace
y / odebug_print_backtrace
.El primero, por ejemplo, te dará una matriz como esta (citando el manual) :
Aparentemente no vaciarán el búfer de E / S, pero puede hacerlo usted mismo, con
flush
y / oob_flush
.(Consulte la página del manual de la primera para averiguar por qué "y / o" ;-)
fuente
DEBUG_BACKTRACE_IGNORE_ARGS
parámetros opcionales ; eso los hace funcionalmente equivalentes a(new \Exception())->getTraceAsString()
Más legible que
debug_backtrace()
:fuente
debug_backtrace
para devolver solo el primer nivel en el stacktrace: esta solución hace el trabajo por mí. ¡Gracias!print_r
retendrá todos los mensajes.Para registrar el rastro
Gracias @Tobiasz
fuente
Backtrace arroja una gran cantidad de basura que no necesita. Se tarda mucho, es difícil de leer. Todo lo que siempre quieres es "¿cómo se llama qué de dónde?" Aquí hay una solución simple de función estática. Normalmente lo pongo en una clase llamada 'depuración', que contiene todas mis funciones de utilidad de depuración.
Lo llamas así:
Y produce resultados como este:
fuente
Es extraño que nadie haya publicado de esta manera:
Esto realmente imprime la traza inversa sin la basura, solo qué método se llamó y dónde.
fuente
Si desea un seguimiento de la pila que se parece mucho a cómo php formatea el seguimiento de la pila de excepción que usar esta función, escribí:
Esto devolverá una traza de pila formateada así:
fuente
$e = new Exception; echo $e->getTraceAsString();
¿Eso hace lo que quieres?
fuente
Ver
debug_print_backtrace
. Supongo que puedes llamarflush
después si quieres.fuente
phptrace es una gran herramienta para imprimir la pila PHP en cualquier momento cuando lo desee sin instalar ninguna extensión.
Hay dos funciones principales de phptrace: primero, imprimir la pila de llamadas de PHP que no necesita instalar nada, segundo, rastrear los flujos de ejecución de php que necesitan instalar la extensión que proporciona.
como sigue:
fuente
Se utiliza
debug_backtrace
para obtener un seguimiento de las funciones y métodos que se han llamado y qué archivos se han incluido que condujeron al punto dondedebug_backtrace
se ha llamado.fuente
Eche un vistazo a esta clase de utilidades, puede ser útil:
Uso:
Clase de origen: https://github.com/augustowebd/utils/blob/master/Who.php
fuente
debug_backtrace()
fuente
Es posible que desee investigar
debug_backtrace
, o tal vezdebug_print_backtrace
.fuente
La solución de Walltearer es excelente, particularmente si está encerrada en una etiqueta 'pre':
- que establece las llamadas en líneas separadas, perfectamente numeradas
fuente
He adaptado la respuesta de Don Briggs anterior para usar el registro de errores internos en lugar de la impresión pública, lo que puede ser su gran preocupación cuando trabaje en un servidor en vivo. Además, se agregaron algunas modificaciones más, como la opción de incluir la ruta completa del archivo en lugar del nombre básico (porque podría haber archivos con el mismo nombre en diferentes rutas) y también (para aquellos que lo requieran) una salida completa de la pila de nodos:
fuente