Share via


¿Qué? Esto no debiera haber ocurrido. Encontrar errores lógicos

Actualización: noviembre 2007

En esta lección, aprenderá a encontrar errores lógicos en el programa.

En lecciones anteriores, aprendió a encontrar y corregir errores del compilador y errores en tiempo de ejecución. El tercer tipo de error de programación, los errores lógicos, puede ser el más difícil de detectar. Con los errores lógicos no se obtiene ninguna advertencia, se ejecutará el programa pero proporcionará resultados incorrectos. Es necesario repasar el código y determinar la razón del problema.

Afortunadamente, las herramientas de depuración de Visual Basic pueden ayudar. Dos técnicas de depuración, que establecen puntos de interrupción e instrucciones paso a paso a través del código, permiten inspeccionar el código línea por línea mientras se ejecuta para encontrar el error.

Se puede establecer un punto de interrupción en el Editor de código para cualquier línea ejecutable de código. Cuando se ejecuta el programa, los puntos de interrupción fuerzan que se detenga y el programa entra en el modo de interrupción cuando llega a esa línea de código. Puede obtener la información que desee sobre el estado del programa en ese momento. Puede comprobar el valor de cualquier variable, comprobar expresiones en la ventana Inmediato o realizar cambios en el código con Editar y continuar.

Cuando está en modo de interrupción, puede recorrer el código, ejecutando línea por línea para ver cómo funciona. Al presionar la tecla F8, se ejecutará la línea de código actual y se detendrá en la línea siguiente. Puede inspeccionar los valores de variables para ver cómo cambian de una línea a la siguiente.

Si la línea de código actual llama a una función o procedimiento Sub en otra parte del código, cuando presiona F8, la ejecución se desplazará a ese procedimiento. Una vez que se haya ejecutado ese procedimiento, el programa volverá a la línea siguiente a la que llamó al procedimiento. Si no desea recorrer un procedimiento, puede presionar MAYÚS+F8 para saltarlo.

Inténtelo

Para observar un error lógico

  1. En el menú Archivo, elija Nuevo proyecto.

  2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.

  3. En el cuadro Nombre, escriba LogicErrors y haga clic en Aceptar.

    Se abre un nuevo proyecto de formularios Windows Forms.

  4. Desde el Cuadro de herramientas, arrastre dos controles TextBox y un control Button hacia el formulario.

  5. Haga doble clic en Button1 para abrir el Editor de código.

  6. En el controlador de eventos Button1_Click, agregue el siguiente código.

    Dim minutes As Integer = CInt(Textbox1.Text)
    Dim miles As Double = CDbl(Textbox2.Text)
    Dim hours As Double = 0
    hours = minutes / 60
    MsgBox("Average speed " & GetMPH(hours, miles))
    
  7. Debajo de la línea End Sub, agregue la siguiente función.

    Function GetMPH(ByVal miles As Double, ByVal hours As Double) _
    As String
        GetMPH = CStr(miles / hours)
    End Function
    
  8. Presione F5 para ejecutar el programa. En el primer cuadro de texto, escriba 10 (para representar 10 minutos) y en el segundo cuadro de texto, escriba 5 (para representar las millas) y, a continuación, haga clic en Button1.

    Aparecerá un cuadro con el mensaje "Average speed 0.03333334" (velocidad media 0,03333334) ; no obstante, si recorre 5 millas en diez minutos, la respuesta correcta serían 30 mph.

    Mantenga abierto el proyecto: en el siguiente procedimiento aprenderá cómo encontrar el error lógico.

Encontrar errores lógicos

En el último ejemplo, algo está obviamente mal con la lógica del programa. Según el resultado, viaja menos de una milla por hora, no treinta millas por hora como espera, pero ¿dónde está el error?

En el siguiente procedimiento se establecerá un punto de interrupción y se examinará el código para encontrar el error.

Inténtelo

Para establecer un punto de interrupción y recorrer el código

  1. En el Editor de código, busque la línea hours = minutes / 60 y haga clic en el margen izquierdo.

    Aparecerá un punto rojo en el margen y el código resaltado en rojo, lo que representa un punto de interrupción.

  2. Presione F5 para ejecutar el programa nuevamente. En el primer cuadro de texto, escriba 10 y en el segundo cuadro de texto, escriba 5. Haga clic en Button1.

    El programa se detendrá cuando llegue al punto de interrupción. La línea hours = minutes / 60 aparecerá resaltada en amarillo.

    Inspeccione los valores de las variables manteniendo el mouse sobre ellos; el valor de hours debe ser 0 y el valor de minutes debe ser 10.

  3. Presione F8 para ejecutar la línea hours = minutes / 60 y pasar a la siguiente línea.

    Inspeccione los valores de las variables de la línea MsgBox("Average speed " & GetMPH(hours, miles)), el valor de hours debe ser ahora 0.166666672 y el valor de miles debe ser 5.0.

  4. Presione F8 de nuevo para ejecutar la línea actual.

    Observe que la ejecución baja a la línea Function GetMPH.

    Inspeccione los valores de las variables en esta línea; observará que el valor de miles es ahora 0.166666672 y el de hours es 5.0, lo contrario de lo que eran en la línea anterior. Ha encontrado el error.

    Mantenga abierto el proyecto: en el siguiente procedimiento aprenderá a corregir el error lógico.

Corregir errores lógicos

En el procedimiento anterior, los valores para las variables miles y hours cambiaron de lugar. ¿Puede identificar la causa?

Si examina la línea MsgBox("Average speed " & GetMPH(hours, miles)), verá que a la función GetMPH se pasan dos argumentos, hours y miles, en ese orden. Si examina la declaración de función Function GetMPH(ByVal miles As Double, ByVal hours As Double)..., observará que los argumentos se muestran como miles primero y como hours después.

Se produjo un error en la lógica porque los argumentos se pasaron en el orden equivocado, produciendo un cálculo incorrecto. Si los argumentos hubieran sido de tipos diferentes, habría visto un error en tiempo de ejecución, pero como los argumentos eran del mismo tipo, no se produjo el error. Fue un error simple, pero el error resultante fue difícil de encontrar.

En el siguiente procedimiento se establecerá un punto de interrupción y se recorrerá el código para encontrar el error.

Inténtelo

Para corregir el error lógico

  1. En el Editor de código, cambie la línea MsgBox("Average speed " & GetMPH(hours, miles)) para que se lea de la siguiente manera:

    MsgBox("Average speed " & GetMPH(miles, hours))
    
  2. Haga clic en el punto rojo en el margen izquierdo para borrar el punto de interrupción.

  3. Presione F5 para ejecutar el programa. En el primer cuadro de texto, escriba 10 y en el segundo cuadro de texto, escriba 5. Haga clic en Button1.

    Esta vez el cuadro de mensaje debe mostrar el resultado correcto, "Average speed 30" (velocidad media 30).

    Puede parecer que se corrigió el programa, pero hay otro error lógico aun más difícil de encontrar. Si desea probar y encontrarlo, mantenga el proyecto abierto; lo usará de nuevo en la lección Otro error: todavía hay algo que no va bien.

Pasos siguientes

En esta lección, aprendió a encontrar y corregir un error lógico. Ahora puede continuar con la siguiente lección acerca del uso de comentarios o ponerse a prueba y encontrar otro error lógico en Otro error: todavía hay algo que no va bien.

Siguiente lección: Agregar notas a programas: utilizar comentarios

Vea también

Tareas

¡No funciona! Encontrar y eliminar errores en tiempo de ejecución

Conozca sus errores: tres tipos de errores de programación

Encontrar errores: introducción a la depuración en Visual Basic