Presentación
Cuando programamos, sin dudarlo, una de las etapas importantes es la depuración del código. Partiendo desde la premisa «somos humanos y comentemos errores», un código puede estar correcto en su sintaxis, pero aún así tener errores en su forma de trabajar. Tal vez olvidamos poner un contador y terminamos con un bucle infinito a mitad de código.
La idea de este artículo es comentar algunas formas de depurar un código. Todos ellos basado en Xdebug que hasta el momento es la mejor opción que encontré para depurar.
¿Cómo depurar?
Todo lo que comentaré en este artículo está basado en mi experiencia personal, esto no quiere decir que sean los únicos medios para realizar la depuración, ni los únicos programas. No hay absolutos, cada uno lo realiza de la manera que le sea más cómodo.
Elementos necesarios
Para comenzar a depurar es necesario tener:
- IDE: (Integrated Development Environment) Entorno de Desarrollo integrado.
- Debuger
- Servidor Web
Cuando uno comienza buscar lo más rápido, es por eso que en su momento usé versiones de pruebas de distintas IDEs que ya traían integradas uno servidor web y todo configurado para depurar directamente.
Con el tiempo y analizando códigos más complejos estos dejaron de ser útiles, lo que hice fue configurar el depurador en mi servidor web. De esta manera corrían sobre apache permitiendo depurar incluso con archivos .htaccess configurados.
IDEs recomendables que permitan depurar de esta manera y son libres tenemos 2. Notepad++ quién permite conectar con Xdebug mediante un plugin. Y por otro lado Eclipse que soporta Xdebuger sin problemas.
Servidor web creo que mucho no hay que comentar, Apache, con PHP instalados. Sólo tendremos que configurar el Xdebug en php.ini, según explica en la documentación. Si Apache corre en Windows lo tendremos un poco más simple. Si lo usamos bajo linux en algunos casos deberemos recompilar.
Como ya comenté en otro artículo, tengo un servidor montado sobre Debian. Para instarlo solo tuve que realizar una búsqueda en APT y desde ahí instalar el módulo necesario llamado php5-xdebug y configurar algunos valores en php.ini.
Métodos para Depurar
Dependiendo de la complejidad y lo largo que sea el Script que debemos depurar hay varios métodos que podemos utilizar. El más simple es paso a paso, luego una ejecución normal que se detenga en ciertos puntos y finalmente una ejecución completa registrando todo lo que sucede.
Paso a Paso
Este método sólo lo recomiendo para Scripts no muy largos. Dependiendo el IDE que estemos usando va a variar las tecla a usar. De esta manera podremos ver el valor de las variables en cada paso del Script, si algo no está dentro de la respuesta prevista se detiene la depuración, se hacen las correcciones necesarias y luego se reinicia el proceso.
Ejecución Normal con Detenciones
Con ejecución normal me refiero a que no se verá cada paso, o que línea se está ejecutando. Lo que debemos hacer es marcar los puntos donde queremos que el Script se detenga. Una vez comenzada la ejecución se realizará normalmente hasta llegar a ese punto. Donde podremos ver los valores de las variables y avanzar paso a paso. O si tenemos algún otro punto marcado le podemos dar click para que continúe normalmente la ejecución.
Esta manera de depurar es muy práctica para Scripts que tengan muchas líneas o incluyan varios archivos. Podríamos poner un punto de detención justo antes del llamado a un función, o de la inclusión de un archivo y ver que valores devuelve o como lo procesa.
Ejecución Completa
Supongamos que debemos analizar un Script programado por otra persona porque nos han solicitado modificaciones. Sabemos que funciona, pero necesitamos entender el cómo funciona. Si es lo suficientemente largo y complejo como para hacer tediosa la tarea de ejecutarlo paso a paso, podríamos aplicar esta forma de trabajo.
Xdebug incorpora una característica llamada Function Traces. Esta permite guardar en Log con todas las funciones llamadas, parámetros y valores devueltos.
En estos días estoy comenzando a utilizarla. Por razones de fuerza mayor no podré estar en mi máquina por un par de días, pero esto no puede ser motivo para retrasarme con algunos trabajos. Entonces para analizar un código en particular lo que hice fue usar esta función para guardar un archivo trace con todos los valores de las variables, valores devueltos por las funciones, etc., para un caso en particular. Ese trace, junto al código fuente, impresos me permiten realizar un análisis del Script sin estar en la PC. Incluso si estuviera en la PC me permitiría seguir la lógica del programa y volver hacia atrás en cualquier momento sin necesidad de reiniciar el proceso, ya que una de las informaciones que incorpora el trace es en qué número de línea del código sucedió el llamado o se devolvió un valor.
Como dije antes, son sólo algunas de las formas de trabajo. Las que utilizo a diario son las dos primeras. La última aprendí a usarla por una necesidad particular, pero al verla le encontré aplicación y ya quedó incorporada para utilizar en futuros análisis.
Otra cosa para destacar es que la depuración puede no ser sólo una herramienta de programación. Es más bien una herramienta de análisis para corrección de errores o para comprender la lógica de un programa.
Tengo pendientes algunos post sobre el servidor que iré realizando en la medida que el tiempo lo permita y ahí explicaré más en detalle la instalación de Xdebug para depurar en forma local o remota.