¡Buenos días, dev community!
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.
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.
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.
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.
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.
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);
}
}
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
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);
Desafío de la Semana
Implementa al menos 2 de estas técnicas esta semana:
- Reemplaza 5
console.log()
conconsole.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
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