Debuggeando en PHP

Todos alguna vez debuggeamos scripts en PHP a lo bruto: se cae el programa así que le vamos poniendo die('hola'); Línea por línea para ver hasta donde llega. Resulta que hay maneras mejores o, al menos más elegantes.

Este post es una versión revisada de mi respuesta en Stack Overflow.

Primero, y suponiendo que el error en cuestión gatille una excepción, lo correcto es manejarla tirándola al log de errores y, si aporta valor, dándole al usuario algún feedback discreto sin mostrar la traza del error que incluye más información de lo prudente.

Dicho esto, hay maneras sofisticadas de hacer lo anterior. PHP permite registrar handlers de excepciones y errores, de manera que el comportamiento natural ya no sea tirar el error por pantalla sino lo que tú prefieras.

Por supuesto hay librerías que convierten ese “lo que tú prefieras” en algo más concreto y amistoso que el handler por defecto. Algunos ejemplos de entre muchos que se pueden usar

Dump Server

Symfony Dump Server y su análogo en Laravel mandan los debug statements al terminal:

introducir la descripción de la imagen aquí

Monolog

Algo más sofisticado es Monolog, que puedes poner como intermediario entre tus excepciones y el destino donde quieres analizar tus trazas de error.

Monolog tiene como handler más básico justamente el log hacia un archivo (StreamHandler) pero permite añadir otros handlers (incluso está el handler para PHP Console) de manera que cuando haya una excepción puedes enviar la traza a tu error_log, a Slack, a la consola, enviar un correo, subirlo a Rollbar o Sentry y más.

PHP Console

Si estamos hablando de algo que corre en el browser, y usas Chrome, existe PHP Console, que manda los mensajes de error a la consola del browser

Se puede manejar manualmente este envío o registrar PHP Console como handler por defecto para que además capture las excepciones que tú no capturaste.

introducir la descripción de la imagen aquí

La gracia es que sólo funciona si además instalas una extensión en Chrome y puedes ponerle password de manera que los visitantes no vean los mensajes aunque tengan la extensión instalada.

Otras herramientas

Aunque no son específicamente lo que buscas, hay herramientas que ayudan mucho en el debug.

Para inspeccionar el contenido de variables, objetos, etc, tienes Kint.

Puntualmente para las excepciones (para entender mejor la traza) tienes Whoops.

introducir la descripción de la imagen aquí

Publica tu respuesta Descartar