github twitter codepen youtube

¿Cómo depurar aplicaciones en PHP?

Cuando comienzas a programar te vas a encontrar con errores que no sabes porque razón hacen que se rompa tu aplicación, y comienzas a frustrarte porque no encuentras la solución, has buscado en Stack Overflow, en grupos, foros especializados y estás a punto de tirar la toalla. Nadie te dijo que existen herramientas que te pueden ayudar a encontrar errores en tú código por suerte ya existen, a estás se les conoce cómo herramientas de depuración (debugger), cada lenguaje tiene las suyas y en PHP tenemos a Xdebug.

El debugger es una herramienta que nos ayuda a encontrar todos estos errores ya sea de sintaxis, advertencias de seguridad, etc. Nos permite ejecutar línea por línea, detener la ejecución temporalmente, visualizar el contenido de las variables, cambiar el valor del entorno de ejecución para poder ver el efecto de una corrección en el programa.

Antes de comenzar un disclaimer de porque vamos usar la siguiente configuración. La vamos a hacer en un entorno XAMPP, porque es una instalación rápida que no requiere de configuración extra, además de que en una encuesta realizada en Twitter por Taylor Otwell el creador de Laravel (framework de PHP muy popular para desarrollar aplicaciones web) preguntó ¿Que configuración de desarrollo local están usando? Y los resultados fueron estos:

2020-10-27_13h11_05.png

Los resultados fueron aplastantes con más de 7000 votos entornos de desarrollo como XAMPP siguen siendo preferidos por la comunidad. No quiere decir que Homestead no nos ofrezca un mejor entorno que los tradicionales, al contrario, pero tengamos en cuenta que muchas aplicaciones no están escritas en frameworks y no incluyen está herramienta por defecto.

Visto lo anterior veamos que técnicas de depuración existen y porque deberías conocerlas.

Técnicas de depuración

Parte de los principios del testing moderno es tratar de ir corrigiendo nuestras técnicas, implementar mejores prácticas y hacer uso de mejores herramientas. El debugging debería ser la última técnica, pero aquí tenemos otras que también deberías revisar y puedes profundizar más.

  • Debugging: Consiste en observar valores de variables y detener temporalmente la aplicación con breakpoints.
  • Logs: Hace un vaciado de cómo las variables van cambiando y es más fácil rastrear la información.
  • Historial: Agiliza la forma de monitorear y observar los comportamientos de nuestro software. Comparando valores y agrupando información.
  • Reportes: Consiste en observar anomalías, acelerar el tiempo de respuesta, prevenir ataques o fallas.

Pasos para depurar

Ahora veamos cuál es el proceso para depurar una aplicación y corregir los errores, no es algo que se deba seguir paso a paso, pero se recomienda hacerlo.

  1. Ir al módulo que falla
  2. Establecer breakpoints
    • En asignación de valores
    • Procesamiento de valores
    • Cambio de estados
  3. Diseñar una matriz de pruebas
  4. Establecer los datos de prueba
  5. Comenzar a depurar

Todos estos términos a simple vista no nos dicen nada, pero no hay mejor forma de entenderlo que llevándolo a la práctica.

Instalación de Xdebug en PHP

Xdebug está disponible en todos los sistemas operativos, así que ahora toca hacer la instalación dependiendo el SO que tengas para poder comenzar a usarlo. Si deseas profundizar más puedes revisar la documentación oficial.

Windows

Para verificar si tenemos habilitada la extensión debemos ejecutar la función phpinfo() ya sea desde el dashboad de XAMPP o creando un archivo PHP con dicha función.

2020-10-27_14h40_48.png

Al abrir la página te muestra toda la configuración del servidor y debes buscar la sección de Xdebug y verificar que este activa.

2020-10-27_14h44_23.png

Si no se encuentra instalada tenemos que hacer lo siguiente:

  1. Descargar el archivo php_xdebug.dll
  2. Mover el archivo al directorio C:\xampp\php\ext
  3. Editar el archivo C:\xampp\php\php.ini y agregar está línea zend_extension = C:\xampp\php\ext\php_xdebug.dll
  4. Reiniciar el servidor de apache

Mac

En Mac es más sencillo y podemos solo ejecutar el siguiente comando desde la terminal.

pecl install xdebug

Linux

Para Linux podemos usar el gestor de paquetes de la distribución que tengamos, por ejemplo, en versiones basadas en Debian tenemos apt y ejecutamos el siguiente comando.

sudo apt install php-xdebug

Después de eso dirígete al directorio etc/php/7.3/mods-available/xdebug.ini y agrega la siguiente configuración.

xdebug.profiler_enable_trigger = 1

xdebug.profiler_enable = 0

xdebug.remote_enable = 1

xdebug.profiler_output_dir = "/tmp"

Y finalmente reinicia el servidor.

sudo service apache2 restart

Configurar Xdebug en VSCode

Ya que tenemos instalada la extensión de Xdebug podemos continuar con la instalación en Visual Studio Code, lo primero que vamos a hacer es buscar la extensión "PHP debug" e instalarla.

2020-10-27_17h23_36.png

Ahora vamos a inicializar el Debug, en la parte lateral izquierda de VSCode tenemos un botón que tiene un icono de bicho, lo presionamos y nos solicita que seleccionamos el debug de nuestro lenguaje, también puede que te solicite donde está el archivo binario de PHP que se encuentra en la ruta C:\xampp\php\php.exe

2020-10-27_17h24_50.png

Se creará una configuración como la imagen de abajo.

2020-10-27_18h11_28.png

Listo ya podemos comenzar a depurar nuestras aplicaciones, revisemos de que controles disponemos para depurar.

2020-10-27_19h20_46.png

Tenemos tres áreas principales donde tenemos todas las variables que usa la aplicación, donde podemos ver sus propiedades y cambiarlas, vemos también en la parte inferior la lista de los breakpoints que hemos establecido, disponemos de un control que nos permite controlar que hacer al llegar a cada breakpoint cuando la aplicación está en ejecución.

Los breakpoint los podemos colocar en cada línea de código que deseemos depurar y con solo hacer clic del lado izquierdo se marcan unos puntos de color rojo.

2020-10-27_19h34_02.png

Hemos terminado de configurar el editor, ahora que tienes una nueva herramienta a tu disposición podrás solucionar esos bugs con más facilidad, ya no más var_dump() ni echo() 😃.

Existen otros depuradores para distintos IDEs pero siéntete libre de usar el que más te agrade está es una opción más.