🔧 Tech Tips Monday: 6 Técnicas de Debugging que Todo Developer Debería Dominar

¡Buenos días, dev community! :glowing_star:

Arrancamos una nueva semana con Tech Tips Monday. Hoy vamos con técnicas de debugging que van más allá del típico console.log() y que realmente aceleran la resolución de problemas.

:detective: 1. Debugging Contextual con Console.group()

El console.log() básico se vuelve caótico en aplicaciones complejas. Organiza tu debugging:

Copiar

// Agrupa logs relacionados
console.group('🔐 Proceso de Autenticación');
console.log('Usuario:', user.email);
console.log('Token válido:', isTokenValid);
console.log('Permisos:', userPermissions);
console.groupEnd();

// Para debugging condicional
console.groupCollapsed('📊 Datos de Performance');
console.time('API Response');
// ... tu código
console.timeEnd('API Response');
console.groupEnd();

Resultado: Logs organizados y fáciles de leer, especialmente en aplicaciones con mucha actividad.

:bullseye: 2. Breakpoints Condicionales: Tu Nueva Arma Secreta

No más breakpoints que se activan 1000 veces. En DevTools:

Copiar

// Click derecho en breakpoint → Add conditional breakpoint
user.id === 'admin' && request.method === 'POST'

// O breakpoints que solo se activan después de X veces
hitCount >= 5

// Para APIs que fallan esporádicamente
response.status >= 400

Pro tip: Combina con logpoints para debugging sin detener ejecución.

:magnifying_glass_tilted_left: 3. Network Tab: Debugging de APIs Avanzado

Más allá de solo ver las requests:

  • Filtrar por tipo: method:POST status-code:400-499
  • Response time analysis: Ordena por “Time” para encontrar APIs lentas
  • Copy as cURL: Para replicar requests problemáticos
  • Preserve log: Mantén logs entre navegaciones para SPAs

Técnica ninja: Usa “Replay XHR” para probar fixes sin recargar toda la app.

:high_voltage: 4. Source Maps: Debugging de Código Minificado

Cuando el código en producción no coincide con tu desarrollo:

Copiar

// En webpack.config.js
module.exports = {
  devtool: 'source-map', // Para producción
  // devtool: 'eval-source-map' // Para desarrollo
};

// Verificar source maps en DevTools
// Settings → Sources → Enable JavaScript source maps

Debugging tip: Si no tienes source maps, usa “Pretty print” ({}) en DevTools para formatear código minificado.

:bug: 5. Error Boundaries Inteligentes en React

No todos los errores son iguales. Crea boundaries que te den contexto:

Copiar

class SmartErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false, errorInfo: null };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Log con contexto útil
    console.group('🚨 Error Boundary Triggered');
    console.log('Component Stack:', errorInfo.componentStack);
    console.log('Error:', error.message);
    console.log('Props cuando falló:', this.props);
    console.groupEnd();
    
    // Enviar a servicio de logging
    this.logErrorToService(error, errorInfo);
  }
}

:wrench: 6. Debugging de Performance: Más Allá del Performance Tab

Técnicas específicas para problemas de rendimiento:

Copiar

// Memory leaks detection
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    if (entry.name === 'measure') {
      console.log(`⏱️ ${entry.name}: ${entry.duration}ms`);
    }
  });
});
observer.observe({ entryTypes: ['measure'] });

// Detectar re-renders innecesarios en React
const WhyDidYouRender = require('@welldone-software/why-did-you-render');
WhyDidYouRender(React, {
  trackAllPureComponents: true,
});

// Bundle size analysis
npm install --save-dev webpack-bundle-analyzer

:light_bulb: Bonus: Debugging Remoto y Cross-Browser

Para mobile debugging:

  • Chrome DevTools → More tools → Remote devices
  • Safari → Develop → [Device name]

Para debugging entre navegadores:

Copiar

// Feature detection debugging
const debugFeatures = {
  webGL: !!window.WebGLRenderingContext,
  serviceWorker: 'serviceWorker' in navigator,
  webAssembly: typeof WebAssembly === 'object'
};
console.table(debugFeatures);

:bullseye: Desafío de la Semana

Implementa al menos 2 de estas técnicas esta semana:

  • Reemplaza 5 console.log() con console.group()
  • Configura un breakpoint condicional en lugar de uno normal
  • Agrega un Error Boundary inteligente a tu app React
  • Analiza el performance de una feature lenta con las herramientas mencionadas

:speech_balloon: Pregunta para la Community

¿Cuál es el bug más frustrante que han tenido que debuggear? ¿Qué técnica terminó siendo la clave para resolverlo?

Compartamos war stories y técnicas que nos han salvado horas de debugging hell.


#TechTipsMonday debugging #DevTools #Performance #React javascript webdev #ProductivityHacks