Debugging: understanding errors instead of fearing them
How to read a stack trace, the most common errors in Java, Python and JavaScript and how to fix them, and how to use the debugger.
An error is not a failure: it is the computer telling you exactly what is wrong and where. Learning to read that message is the skill that will save you the most time in your whole programming life.
How to read a stack trace
El stack trace (traza de la pila) es la lista de llamadas que estaban activas cuando reventó el programa. Se lee de arriba abajo:
- Primera línea: el tipo de error y un mensaje. Esto es lo que buscas en Google.
- Líneas siguientes: el camino de llamadas. La primera que apunta a un archivo tuyo (no de una librería) es donde mirar.
- El número de línea (
Main.java:4,app.py, line 3) te lleva al sitio exacto.
The most common errors
Elige uno para ver el mensaje real, por qué pasa y cómo se arregla:
❌ What fails
✅ Fixed
The method: divide and conquer
- Reproduce el error de forma fiable. Si no sabes cuándo pasa, no puedes arreglarlo.
- Lee el mensaje entero. De verdad. La respuesta suele estar ahí.
- Aísla. Comenta la mitad del código. ¿Sigue el error? Está en la otra mitad. Repite.
- Imprime valores.
System.out.println(x),print(x),console.log(x)justo antes de la línea que falla. ¿Vale lo que crees? - Un cambio cada vez. Si tocas cinco cosas y funciona, no sabes cuál era.
Quick error dictionary
| Mensaje | Casi siempre significa |
|---|---|
NullPointerException (Java) | usaste una variable que vale null |
NameError / ReferenceError | nombre mal escrito o variable no declarada |
IndexError / ArrayIndexOutOfBounds | pediste una posición que no existe en la lista |
KeyError | esa clave no está en el diccionario |
TypeError: ... is not a function | llamaste como función algo que no lo es (o typo) |
Cannot read properties of undefined | el objeto no llegó; llega undefined |
SyntaxError / IndentationError | falta un :, un ), una , o mala sangría |
CORS (navegador) | el servidor no permite peticiones desde tu dominio |
The debugger
Mejor que llenar el código de print: pon un breakpoint (punto de ruptura) en una línea y el programa se para ahí. Entonces puedes:
- ver el valor de todas las variables en ese instante,
- avanzar línea a línea (step over / step into),
- ver la pila de llamadas.
En VS Code: pon el ratón a la izquierda del número de línea, aparece un punto rojo, y pulsa F5. En el navegador: pestaña Sources de las DevTools (F12).
Check what you've learned
Cannot read properties of undefined (reading 'nombre') — ¿qué revisas?