Dificultad: intermedio

Debuggear código y explicar errores

Diagnosticar problemas en 3 niveles (síntoma, causa raíz y fix mínimo) con explicación educativa y prevención.

Prompt

Eres ingeniero senior de debugging especializado en encontrar raíces de problemas.

DATOS QUE ME PASAS:
- Código problemático (completo o sección relevante)
- Error exacto (stack trace completo, mensaje de error, comportamiento inesperado)
- Contexto: lenguaje, versión, ambiente (dev/staging/prod), qué esperabas vs. qué pasó

TU TAREA:
Diagnostica el problema en 3 niveles:
✓ Síntoma (qué va mal)
✓ Causa raíz (por qué va mal, línea exacta, por qué esa línea)
✓ Fix mínimo (cambio más pequeño que resuelve)
✓ Explicación educativa (por qué falló, para aprender)
✓ Prevención (cómo evitar en futuro)

FORMATO ENTREGA:
---
🔍 DIAGNÓSTICO
Síntoma: [qué ves/error exacto]
Causa raíz: [línea + por qué]
Confianza: [high/medium/low]

✅ FIX MÍNIMO
[Código cambio exacto]

📚 POR QUÉ FALLÓ
[Explicación clara, 2-3 frases]

🛡️ PREVENCIÓN FUTURA
[Patrón, test, validación que evita esto]

---

SÍ HAGAS: specific, code examples, causal logic
NO HAGAS: especulaciones sin evidencia, fixes parciales sin explicar, propuestas alternativas si no piden
RESTRICCIÓN: Si error está incompleto o ambiguo, pide más datos antes de diagnosticar

Cómo utilizarlo

  1. Pega código COMPLETO (o mínimo compilable):

- Si función de 100 líneas, pega toda (contexto importa)
- Si es una sección, pon líneas arriba/abajo para contexto
- Variables globales relevantes: especifica

  1. Error exacto:

- Copia stack trace completo (no resumen)
- Si no hay stack trace, describe: qué esperaba, qué pasó
- Dónde sucede: ambiente (dev? prod?), paso (en login? sync? fetch?)

  1. Contexto crítico:

- Lenguaje + versión (Node 18.5, Python 3.9, etc.)
- Framework si aplica (Express, Flask, React, etc.)
- Qué intentaste: "cambié línea 42 y pasó esto"

  1. Errores a evitar:

- NO digas "el código no funciona" sin stack trace
- NO pegues 500 líneas si el error es en 20 líneas (da contexto pero sé eficiente)
- NO hagas múltiples preguntas si es un debug (1 problema = 1 debug)

Ejemplo de resultado

INPUT:
"Node.js + Express. Error al acceder datos de usuario.

Código:


app.get('/user/:id', (req, res) => {
const userId = req.params.id;
const user = users.find(u => u.id === userId);
res.json(user);
});


Error exacto:
TypeError: Cannot read property 'id' of undefined
Stack: at line 4 (res.json(user))

Contexto: users es array global. El error aparece cuando userId no existe.
Esperaba: respuesta JSON vacío o error 404, no crash.
"

OUTPUT:


🔍 DIAGNÓSTICO
Síntoma: TypeError cuando usuario no existe en array
Causa raíz: res.json(user) intenta serializar undefined (user no encontrado)
Confianza: HIGH

✅ FIX MÍNIMO

app.get('/user/:id', (req, res) => {
  const userId = req.params.id;
  const user = users.find(u => u.id === userId);
  
  if (!user) {
    return res.status(404).json({ error: 'Usuario no encontrado' });
  }
  
  res.json(user);
});

📚 POR QUÉ FALLÓ
Tu código no validaba si find() devolvía resultado. Si no encuentra coincidencia, find() devuelve undefined, y luego intentas hacer undefined.id, crash. Express no maneja bien res.json(undefined).

🛡️ PREVENCIÓN FUTURA
Siempre valida antes de usar resultado:

// Pattern correcto
const result = array.find(...);
if (!result) {
  return res.status(404).json(...); // sale aquí
}
// continues si llegaste aquí, result es safe

Alternativa con nullish coalescing:

res.json(user || { error: 'No encontrado' });