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_backtracey / 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
flushy / oob_flush.(Consulte la página del manual de la primera para averiguar por qué "y / o" ;-)
fuente
DEBUG_BACKTRACE_IGNORE_ARGSparámetros opcionales ; eso los hace funcionalmente equivalentes a(new \Exception())->getTraceAsString()Más legible que
debug_backtrace():fuente
debug_backtracepara devolver solo el primer nivel en el stacktrace: esta solución hace el trabajo por mí. ¡Gracias!print_rretendrá 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 llamarflushdespué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_backtracepara obtener un seguimiento de las funciones y métodos que se han llamado y qué archivos se han incluido que condujeron al punto dondedebug_backtracese 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