Depuración de scripts PHP con NetBeans IDE
Como ya sabe, cuando alguien escribe código en un lenguaje de alto nivel, puede cometer dos tipos de errores: errores de sintaxis y errores de lógica. NetBeans IDE proporciona todas las herramientas necesarias para ayudarlo a depurar sus scripts y encontrar los errores.
Depuración de errores de sintaxis
Afortunadamente, NetBeans IDE detecta errores de sintaxis mientras escribe y los subraya con una línea roja ondulada como se muestra en la Figura 1.
Figura 1 En el IDE NetBeans, los errores de sintaxis se subrayan con una línea roja ondulada
Todo lo que tiene que hacer es corregir el error correspondiente y la línea roja desaparecerá de inmediato. Sin embargo, si no está seguro de lo que está mal con su código, puede colocar el cursor del ratón en el signo de exclamación rojo. NetBeans IDE intentará ayudarlo mostrando una ventana emergente con una breve explicación del error, como se muestra en la Figura 2.
Figura 2 El IDE de NetBeans muestra una explicación de un error de sintaxis
Depurar errores de lógica ejecutando scripts paso a paso
En comparación con los errores de sintaxis, los errores de lógica son más difíciles de encontrar. Dado que el IDE de NetBeans no puede detectar y subrayar errores de lógica, ¡está solo! Veamos el siguiente script PHP, por ejemplo. Solicita al usuario que introduzca dos números y calcula y muestra su suma. Sin embargo, contiene un error de lógica!
<?php $s = 0; echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $S = $a + $b; echo "The sum is: ", $s;?>
Si escribe este script en el IDE NetBeans, notará que no hay ni un signo de exclamación que indique ningún error. Sin embargo, si ejecuta el script (MAYÚS+F6) e introduce dos valores, 5 y 2, puede ver por sí mismo que, aunque la suma de 5 y 2 es 7, el IDE de NetBeans insiste en que es cero, como se muestra en la Figura 3.
Figura 3 Viendo el resultado de un error lógico en la ventana de salida
¿Qué diablos está pasando? Por supuesto, para un programador experto, corregir este error sería pan comido. Pero para ti, un novato, a pesar de que te esfuerzas mucho, no encuentras nada malo. Entonces, ¿dónde está el error?
A veces los ojos humanos se cansan tanto que no pueden ver lo obvio. Por lo tanto, vamos a tratar de usar un poco de magia! Intentemos ejecutar el script paso a paso usando el depurador. Esto le da la oportunidad de observar el flujo de ejecución y echar un vistazo más de cerca a los valores actuales de las variables en cada paso.
Inicie el depurador seleccionando «Depurar →
Archivo de depuración» en el menú principal o pulsando la combinación de teclas CTRL+MAYÚS+F5. Al hacer esto, habilita el depurador y se muestran más iconos en la barra de herramientas.
Aviso: Para habilitar el depurador (XDebug), necesita modificar el PHP.archivo ini. Más información aquí.
El contador de programa (el icono de flecha verde en el margen gris) se detiene en la primera línea del script, como se muestra en la Figura 4.
Figura 4 Uso del depurador en el IDE NetBeans
Aviso: El contador de programas le muestra, en cualquier momento, qué instrucción es la siguiente que se va a ejecutar.
Haga clic en el icono «Entrar» en la barra de herramientas. Esta acción le dice al intérprete PHP que ejecute la instrucción $s = 0
, y el contador de programa se mueve a la segunda instrucción PHP, que es la siguiente a ser ejecutada.
En el menú principal, seleccione «Ventana →
Depuración →
Variables». En la ventana que aparece, puede ver todas las variables declaradas en la memoria principal (RAM) y el valor que contienen durante cada paso de ejecución. Hasta ahora, la única variable declarada y asignada a un valor es la variable $s
, como se muestra en la Figura 5.
Figura 5 El valor de la variable $s se muestra en la ventana Variables del depurador
Haga clic de nuevo en el icono de la barra de herramientas «Paso a paso» . Se ejecuta la segunda sentencia. Puede volver a la ventana «Salida» y ver el resultado de salida (ver Figura 6).
Figura 6 Visualización de un mensaje en la ventana de salida
Haga clic de nuevo en el icono de la barra de herramientas» Paso a paso » . La tercera instrucción PHP se ejecuta y el programa espera a que usted introduzca un valor. Coloque el cursor dentro de la ventana» Salida», escriba el valor 5 y presione la tecla» Enter Enter».
El contador de programa se mueve a la cuarta instrucción PHP. Si regresa a la ventana» Variables», puede ver que, en este momento, dos variables ($a
y $s
) están declaradas en la memoria principal (RAM), como se muestra en la Figura 7.
Figura 7 Los valores de las variables a a y s s se muestran en la ventana Variables
Haga clic en el icono de la barra de herramientas «Entrar» dos veces. Esta acción ejecuta las sentencias PHP cuarta y quinta. Coloque el cursor dentro de la ventana» Salida», escriba el valor 2 y presione la tecla» Enter Enter».
El contador de programa se mueve a la sexta instrucción PHP. Si regresa a la ventana» Variables», puede ver que, en este momento, tres variables ($a, $b
y $s
) están declaradas en la memoria principal (RAM) como se muestra en la Figura 8.
Figura 8 Los valores de las variables $a, $b
y $s
se muestran en la ventana Variables
Haga clic en el icono de la barra de herramientas «Entrar» una vez más. Se ejecuta la instrucción $S = $a + $b
. Lo que esperabas aquí era la suma de 5 y 2, que es 7, que se asignaría a la variable $s
. En lugar de esto, se declara una nueva variable $S
en la memoria principal (RAM) y se le asigna el valor 7, como se muestra en la Figura 9.
Figura 9 Todas las variables declaradas se muestran en la ventana Variables del depurador
¡Ahora es más obvio para usted! Ha declarado erróneamente dos variables en la memoria principal (RAM), la variable $s
y la variable $S
con S mayúscula. Por lo tanto, cuando el flujo de ejecución va a la última instrucción, echo "The sum is: ", $s
se muestra el valor 0 en lugar del valor 7.
¡Acaba de encontrar el error! Haga clic en el icono de la barra de herramientas» Finalizar sesión de depurador » para cancelar la ejecución, corrija el error cambiando la variable $S
a $s
, ¡y estará listo! ¡Acabas de realizar tu primera depuración! Vuelva a ejecutar el script y verá que calcula y muestra la suma correctamente.
Depurar errores de lógica añadiendo puntos de interrupción
Depurar paso a paso tiene una gran desventaja. Tienes que hacer clic en el icono de la barra de herramientas «Entrar» una y otra vez hasta llegar a la posición en la que podría estar el error. ¿Te imaginas haciendo esto en un guión grande?
Para scripts grandes hay otro enfoque. Si sospecha que el error está en algún lugar al final del script, no es necesario depurar todo desde el principio. Puede agregar un marcador (llamado «punto de interrupción») donde cree que podría estar el error, ejecutar el script y cuando el flujo de ejecución alcance ese punto de interrupción, el flujo de ejecución se detendrá automáticamente. A continuación, puede echar un vistazo más de cerca a los valores actuales de las variables en la posición donde se detuvo el script.
Aviso: Cuando el script se detiene, tiene dos opciones para reanudar la ejecución: puede agregar un segundo punto de interrupción en algún lugar debajo del script, hacer clic en el icono de barra de herramientas «Continuar» y permitir que el script continúe la ejecución hasta ese nuevo punto de interrupción; o bien, puede usar el icono de barra de herramientas «Paso a paso» y ejecutar el script paso a paso a partir de entonces.
El siguiente script PHP solicita al usuario que introduzca dos valores y calcula su valor promedio.
Sin embargo, el script contiene un error de lógica. Cuando el usuario introduce los valores 10 y 12, se muestra el valor 16, en lugar de 11.
<?php echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $average = $a + $b / 2; echo "The average value is: ", $average;?>
Usted sospecha que el problema está en algún lugar al final del script. Sin embargo, no desea depurar todo el script, sino solo la parte en la que podría estar el error. Por lo tanto, intentemos agregar un punto de interrupción en la instrucción $average = $a + $b / 2
(consulte la Figura 10). Hay dos maneras de hacer esto: puede hacer clic en el margen gris izquierdo del número de línea correspondiente, o puede colocar el cursor en la línea de interés y presionar la combinación de teclas CTRL+F8.
Figura 10 Agregar un punto de interrupción a un script
Aviso: Usted sabe que se ha establecido un punto de interrupción cuando el rectángulo rosa aparece en el margen gris y la línea correspondiente tiene un fondo rosa resaltándolo.
Pulse CTRL + MAYÚS + F5 para iniciar el depurador. Haga clic en el icono de la barra de herramientas» Continuar » e introduzca los valores 10 y 12 cuando se le solicite. Notará que justo después de ingresar el segundo número y presionar la tecla «Enter Enter», el flujo de ejecución se detiene en el punto de interrupción. (Verá que el resaltado de punto de interrupción rosa se reemplaza por el resaltado verde del contador del programa.)
¡Recuerda! Puede depurar un archivo seleccionando «Depurar
→
Depurar archivo» en el menú principal o pulsando la combinación de teclas CTRL+MAYÚS+F5.
Ahora puede echar un vistazo más de cerca a los valores actuales de las variables. Las variables $a
y $b
contienen los valores 10 y 12 respectivamente, como deberían, por lo que no hay nada malo con la entrada de datos, como se muestra en la Figura 11.
Figura 11 Visualización de los valores actuales de dos variables en la ventana Variables
Haga clic en el icono de la barra de herramientas «Paso a paso» una vez. La instrucción $average = $a + $b / 2
se ejecuta y la memoria principal (RAM) ahora contiene los siguientes valores (ver Figura 12).
Figura 12 Visualización de los valores actuales de tres variables en la ventana Variables
¡Ahí está! ¡Acaba de encontrar la instrucción que asigna erróneamente un valor de 16, en lugar de 11, a la variable $average
! Y ahora viene la parte difícil; ¡deberías considerar por qué sucede esto!
¡Después de dos días de pensar, se vuelve obvio! Acabas de olvidar incluir $a + $b
entre paréntesis; por lo tanto, solo la variable $b
se dividió por 2. Haga clic en el icono de la barra de herramientas» Finalizar sesión del depurador » , elimine todos los puntos de interrupción, corrija el error encerrando $a + $b
dentro de paréntesis y ¡listo! Vuelva a ejecutar el script y vea ahora que calcula y muestra correctamente el valor promedio.