8. Debug en Consola y Navegador

 

Tutorial: Debug en Consola y Navegador

🔍 Parte 8: Debug en Consola y Navegador

🎯 Objetivo:

Aprender a depurar (debug) aplicaciones React Native usando la consola de Metro y las herramientas del navegador, identificando cuándo usar cada método.


🚀 Paso 1: Preparar la Aplicación

1.1 Iniciar la Aplicación

  1. Abre tu terminal en el directorio del proyecto

  2. Ejecuta:

  3. powershell

  4. npm run android

  5. Espera a que la aplicación se cargue completamente

  6. Verifica que el Metro Bundler esté corriendo:

  7. text

Welcome to Metro!

  1. Running "myapp" on "emulator-5554"

1.2 Entender el Flujo de Depuración

text

Tu Código → Metro Bundler → Emulador/Dispositivo

     ↓            ↓              ↓

Console.log → Terminal Metro → Consola Navegador


📝 Paso 2: Debug con Console.log Básico

2.1 Agregar un Console.log

  1. Abre App.js en tu editor

  2. Antes del return, agrega:

  3. javascript

  4. console.log('Hola mundo!');

  5. Código completo del ejemplo:

  6. javascript

const App = () => {

  // Debug básico con console.log

  console.log('Hola mundo!');

  

  return (

    <View style={styles.container}>

      <Text>Mi Aplicación</Text>

    </View>

  );

  1. };

  2. Guarda el archivo (Ctrl+S)

2.2 Ver el Resultado en Metro

  1. Observa la terminal de Metro

  2. Verás algo como:

  3. text

  4. LOG  Hola mundo!

  5. Cada vez que guardes el archivo, se ejecutará nuevamente

2.3 Tipos de Console.log

javascript

// Diferentes niveles de log

console.log('Mensaje informativo');    // LOG

console.warn('Advertencia');           // WARN (amarillo)

console.error('Error crítico');        // ERROR (rojo)

console.debug('Debug detallado');      // DEBUG

console.info('Información');           // INFO


// Objetos y arrays

const usuario = { nombre: 'Juan', edad: 25 };

console.log('Usuario:', usuario);

console.table([usuario]);  // Tabla formateada


🎪 Paso 3: Debug con Herramientas del Navegador

3.1 Abrir Menú de Debug

En el emulador/dispositivo:

  1. Agita el dispositivo (en emulador: Ctrl+M)

  2. O haz clic derecho en la pantalla

  3. Selecciona "Debug" o presiona la tecla D

3.2 Conectar con el Navegador

  1. Se abrirá una alerta preguntando qué hacer

  2. Selecciona "Debug"

  3. Se abrirá automáticamente una pestaña en tu navegador:

  4. text

  5. http://localhost:8081/debugger-ui/

  6. Ve a la Consola del Navegador:

    • F12 o Ctrl+Shift+I

    • Pestaña "Console"

3.3 Ejemplo Práctico

  1. Agrega en App.js:

  2. javascript

const App = () => {

  // Este log se verá en el navegador

  console.log('Hola mundo desde navegador!');

  

  // Datos de ejemplo para debug

  const productos = [

    { id: 1, nombre: 'Producto A', precio: 100 },

    { id: 2, nombre: 'Producto B', precio: 200 }

  ];

  

  console.log('Productos:', productos);

  console.table(productos);

  

  return (

    <View style={styles.container}>

      <Text>Debug en Navegador</Text>

    </View>

  );

  1. };

  2. Guarda y verifica en la consola del navegador


🔄 Paso 4: Comparación de Métodos

4.1 Consola Metro vs Navegador

Característica

Consola Metro

Navegador

Velocidad

⚡ Rápido

🐢 Lento

Herramientas

Básicas

Complejas (Network, Sources, etc.)

Breakpoints

❌ No

✅ Sí

Inspección de objetos

Básica

Avanzada (expandible)

Network requests

❌ No

✅ Sí

Memoria/Performance

❌ No

✅ Sí

4.2 ¿Cuándo usar cada uno?

✅ Usa Consola Metro cuando:

  • Debug rápido de valores simples

  • Ver logs durante desarrollo

  • No necesitas inspección profunda

  • Quieres máxima velocidad

✅ Usa Navegador cuando:

  • Necesitas debuggear peticiones HTTP

  • Quieres poner breakpoints

  • Inspeccionar objetos complejos

  • Analizar performance

  • Debuggear errores difíciles


⚠️ Paso 5: Problemas y Soluciones

5.1 Debug Lento con Navegador

Síntoma: La aplicación se vuelve muy lenta cuando el debug del navegador está activo.

Solución:

  1. Desactiva el debug:

    • Menú del dispositivo → "Stop Debugging"

    • O presiona D nuevamente

  2. Usa solo cuando sea necesario

5.2 Console.log no Aparece

Posibles causas y soluciones:

  1. Verifica que Metro esté corriendo

  2. powershell

# Reinicia Metro si es necesario

  1. npm start

  2. Limpia la caché

  3. powershell

  4. npx react-native start --reset-cache

  5. Usa console.warn o console.error (son más visibles)

5.3 Navegador no se Conecta

Solución:

powershell

# Verifica que Metro esté en el puerto correcto

netstat -ano | findstr :8081


# Si el puerto está ocupado

npx kill-port 8081

npm start


🛠️ Paso 6: Técnicas Avanzadas de Debug

6.1 Debug Condicional

javascript

const App = () => {

  const debugMode = true; // Cambiar a false en producción

  

  if (debugMode) {

    console.log('Modo debug activado');

    console.log('Rendering App...');

  }

  

  // Resto del código...

};

6.2 Debug de Estado (State)

javascript

import React, { useState, useEffect } from 'react';


const App = () => {

  const [contador, setContador] = useState(0);

  const [usuarios, setUsuarios] = useState([]);

  

  // Debug cuando el estado cambia

  useEffect(() => {

    console.log('Contador cambió:', contador);

  }, [contador]);

  

  // Debug de API calls

  const fetchData = async () => {

    console.log('Iniciando fetch...');

    try {

      const response = await fetch('https://api.ejemplo.com/data');

      const data = await response.json();

      console.log('Datos recibidos:', data);

      setUsuarios(data);

    } catch (error) {

      console.error('Error en fetch:', error);

    }

  };

  

  return (

    <View>

      <Text>Contador: {contador}</Text>

      <Button 

        title="Incrementar" 

        onPress={() => {

          console.log('Botón presionado');

          setContador(prev => prev + 1);

        }} 

      />

    </View>

  );

};

6.3 Debug de Props

javascript

const MiComponente = ({ titulo, datos, onPress }) => {

  // Debug de props recibidas

  console.log('MiComponente - Props recibidas:', { 

    titulo, 

    datos: datos?.length, 

    onPress: typeof onPress 

  });

  

  return (

    <View>

      <Text>{titulo}</Text>

    </View>

  );

};


🔧 Paso 7: Herramientas de Debug Útiles

7.1 React Developer Tools

Instalación:

powershell

npm install -g react-devtools

Uso:

powershell

# En una terminal separada

react-devtools

Características:

  • ✅ Inspección de componentes

  • ✅ Props y estado en tiempo real

  • ✅ Jerarquía de componentes

7.2 Flipper (Facebook)

Para React Native 0.62+

powershell

# Instala Flipper desde https://fbflipper.com

# Se integra automáticamente con React Native

Ventajas:

  • ✅ Logs visuales

  • ✅ Network inspector

  • ✅ Database inspector

  • ✅ Layout inspector

7.3 Configuración Personalizada

Crea un archivo debugConfig.js:

javascript

// debugConfig.js

export const DEBUG_CONFIG = {

  logs: true,

  network: true,

  errors: true,

  performance: false

};


// Función de debug condicional

export const debugLog = (message, data = null) => {

  if (DEBUG_CONFIG.logs) {

    console.log(`[DEBUG] ${message}`, data || '');

  }

};


// Uso en tu app

import { debugLog } from './debugConfig';


debugLog('Componente montado', { timestamp: Date.now() });


📊 Paso 8: Debug de Performance

8.1 Medir Tiempos

javascript

const ComponenteLento = () => {

  const inicio = performance.now();

  

  // Código costoso...

  const resultado = procesarDatos();

  

  const fin = performance.now();

  console.log(`Tiempo de procesamiento: ${fin - inicio}ms`);

  

  return <Text>Resultado: {resultado}</Text>;

};

8.2 Evitar Console.log en Producción

javascript

// En producción, deshabilitar console.log

if (!__DEV__) {

  console.log = () => {};

  console.warn = () => {};

}


🎯 Paso 9: Ejercicio Práctico

Ejercicio: Debug de API Call

  1. Crea un componente que consuma una API

  2. Agrega console.log en cada etapa

  3. Debuggea tanto en Metro como en navegador

  4. Compara la experiencia

Código de ejemplo:

javascript

import React, { useState, useEffect } from 'react';

import { View, Text, Button } from 'react-native';


const ApiDebugExample = () => {

  const [data, setData] = useState(null);

  const [loading, setLoading] = useState(false);

  const [error, setError] = useState(null);


  const fetchApiData = async () => {

    console.log('🔵 Iniciando fetch...');

    setLoading(true);

    setError(null);

    

    try {

      console.log('🟡 Haciendo request a API...');

      const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');

      console.log('🟢 Response status:', response.status);

      

      const jsonData = await response.json();

      console.log('✅ Datos recibidos:', jsonData);

      

      setData(jsonData);

    } catch (err) {

      console.error('❌ Error en fetch:', err);

      setError(err.message);

    } finally {

      console.log('🏁 Fetch completado');

      setLoading(false);

    }

  };


  return (

    <View style={{ padding: 20 }}>

      <Button title="Obtener Datos" onPress={fetchApiData} />

      {loading && <Text>Cargando...</Text>}

      {error && <Text style={{ color: 'red' }}>Error: {error}</Text>}

      {data && <Text>Datos: {JSON.stringify(data)}</Text>}

    </View>

  );

};


export default ApiDebugExample;


📋 Resumen de Comandos y Atajos

Acción

Atajo/Comando

Abrir menú debug

Ctrl+M (emulador) o agitar dispositivo

Iniciar debug

D

Detener debug

D → "Stop Debugging"

Recargar app

R (dos veces para hard reload)

Limpiar caché

npm start --reset-cache

Ver logs Metro

Terminal donde corre npm start

Abrir consola navegador

F12 o Ctrl+Shift+I


🎬 Próximo Tutorial

En el siguiente video aprenderemos:

  • Navegación entre pantallas

  • React Navigation setup

  • Stack Navigator básico

  • Paso de parámetros entre pantallas


✅ ¡Dominas ahora las técnicas básicas de debug en React Native! Recuerda: usa la consola Metro para debug rápido y el navegador solo cuando necesites herramientas avanzadas. ¡Tu productividad mejorará significativamente!


Comentarios

Entradas más populares de este blog

18. Visualizar nuestros componentes limpios con StyleSheet

15. Componente Image

Tema: 23. Justify Content en Flexbox para Column (Columna) en React Nativ