Fundamentos de Programación · Programación

Depuración y lectura de errores

Interpretar mensajes de error y trazas, y aplicar un método sistemático de depuración para localizar y corregir fallos en un programa.

Depuración y lectura de errores

El error es un mensaje, no un insulto Un programa no falla por maldad sino por una suposición falsa que tú metiste ahí. La depuración es el arte de encontrar esa suposición. El mensaje de error casi siempre te dice dónde mirar.

Tipos de fallos

El mensaje de excepción

Una excepción nombra su tipo (que indica la familia del problema), describe la causa concreta y, en la traza, muestra la pila de llamadas que la provocó. Empezar por el tipo ordena la búsqueda.

Leer una traza

Errores que se repiten

El método científico de depurar

Formular una hipótesis sobre la causa, diseñar una prueba barata que la refute o confirme, y actuar en consecuencia. Cambiar a ciegas, sin hipótesis, es el camino más largo.

Reducir el caso

Una pila de líneas con una lupa sobre la última, un insecto y un triángulo de aviso
La traza se lee de abajo arriba: la última línea marca dónde ocurrió el fallo.

Observar el estado

Imprimir variables, usar un depurador con puntos de interrupción o inspeccionar el paso a paso son maneras de ver qué valor tenía cada cosa en el instante exacto, sin adivinar.

Aislar por mitades

Capturar excepciones

Un bloque que intenta, y ante cierto tipo de error reacciona, permite que el programa maneje lo esperable sin romperse. Capturar demasiado amplio, en cambio, oculta fallos reales.

Registrar para no repetir

Probar para confiar

Una prueba que reproduce el bug, falla antes del arreglo y pasa después, es la garantía de que el problema quedó resuelto y de que no volverá en silencio.

Ejemplo resuelto: un índice fuera de rango ajeno

Tu programa falla con índice fuera de rango dentro de una función de librería que llamaste tú. Con la traza se decide dónde está la culpa.

  1. Leer la traza de abajo arriba hasta la última línea, que indica el punto exacto del fallo.
  2. Subir hasta el primer fotograma propio: ahí está la llamada que lanzaste.
  3. Inspeccionar el argumento que pasaste en esa línea imprimiendo su valor real.
  4. Reducir el caso al ejemplo más pequeño que reproduce el error.
  5. Corregir la suposición falsa (una posición inexistente) y verificar que el caso ya pasa.

¿Para qué sirve en la realidad?

Depurar con método —leer la traza, formular hipótesis y aislar el caso mínimo— convierte horas de cambios a ciegas en minutos, y es una de las habilidades que más tiempo ahorra en cualquier proyecto de software o datos.

En una traza de error, para localizar dónde se produjo el fallo conviene mirar:

Un bug lógico es el tipo de error más difícil de detectar porque el programa corre sin lanzar excepción.

Depuración

Código ilegible para el intérprete
error de sintaxis
Fallo que ocurre al ejecutar
excepción
Corre pero da resultados equivocados
bug lógico
Pila de llamadas que originó el fallo
traza
Ejemplo mínimo que reproduce el error
caso reducido

Ordena las etapas del método sistemático de depuración:

Reproducir
Hipótesis
Observar
Arreglar
Probar

Depuración
Proceso de encontrar y corregir defectos de software.

Une cada tipo de fallo con su señal:

Leer errores con método

# Depuración
## Tipos
### sintaxis
### excepción
### lógico
## Traza
### se lee de abajo arriba
### buscar el fotograma propio
## Método
### hipótesis
### reducir el caso
### observar y probar

Traza de pila
Registro del recorrido de llamadas que ayuda a localizar un error.

Tu programa lanza un índice fuera de rango en una función que no escribiste tú, llamada desde la tuya. Explica paso a paso cómo usarías la traza para decidir si el problema es tuyo o del argumento que pasaste.