Cómo depurar JavaScript

Kayce vascos
Kayce Vascos
Sofía Emelianova
Sofía Emelianova

En este instructivo, se explica el flujo de trabajo básico para depurar cualquier problema de JavaScript en Herramientas para desarrolladores. Lee o mira la versión en video de este instructivo a continuación.

Paso 1: Reproduce el error.

El primer paso para la depuración siempre es encontrar una serie de acciones que reproduzcan un error de manera coherente.

  1. Abre esta demostración en una pestaña nueva.
  2. Ingresa 5 en el cuadro de texto Número 1.
  3. Ingresa 1 en el cuadro de texto Número 2.
  4. Haz clic en Add Number 1 and Number 2. La etiqueta debajo del botón dice 5 + 1 = 51. El resultado debe ser 6. Este es el error que vas a corregir.

El resultado de 5 + 1 es 51. Debería ser 6.

En este ejemplo, el resultado de 5 + 1 es 51. Debería ser 6.

Paso 2: Familiarízate con la IU del panel Sources

Las Herramientas para desarrolladores ofrecen muchas herramientas para distintas tareas, como cambiar el código CSS, generar perfiles del rendimiento de la carga de la página y supervisar las solicitudes de red. El panel Sources es donde depuras JavaScript.

  1. Abra Herramientas para desarrolladores. Para ello, presione Comando + Opción + J (Mac) o Control + Mayúsculas + J (Windows y Linux). Este acceso directo abre el panel Console.

    El panel Console.

  2. Haz clic en la pestaña Fuentes.

    El panel Sources.

La IU del panel Sources consta de 3 partes:

Las 3 partes de la IU del panel Sources.

  1. Panel File Navigator Aquí se muestran todos los archivos que solicita la página.
  2. El panel Code Editor (Editor de código). Después de seleccionar un archivo en el panel File Navigator, su contenido se muestra aquí.
  3. El panel JavaScript Debugging Diversas herramientas para inspeccionar el código JavaScript de la página. Si la ventana de Herramientas para desarrolladores es ancha, este panel se muestra a la derecha del panel Editor de código.

Paso 3: Pausa el código con un punto de interrupción

Un método común para depurar un problema como este es insertar muchas instrucciones console.log() en el código para inspeccionar los valores a medida que se ejecuta la secuencia de comandos. Por ejemplo:

function updateLabel() {
  var addend1 = getNumber1();
  console.log('addend1:', addend1);
  var addend2 = getNumber2();
  console.log('addend2:', addend2);
  var sum = addend1 + addend2;
  console.log('sum:', sum);
  label.textContent = addend1 + ' + ' + addend2 + ' = ' + sum;
}

El método console.log() puede realizar el trabajo, pero los puntos de interrupción pueden hacerlo más rápido. Una interrupción te permite pausar el código en medio de la ejecución y examinar todos los valores en ese momento. Los puntos de interrupción tienen algunas ventajas sobre el método console.log():

  • Con console.log(), debes abrir manualmente el código fuente, buscar el código relevante, insertar las sentencias console.log() y, luego, volver a cargar la página para ver los mensajes en Console. Con los puntos de interrupción, puedes detenerte en el código relevante sin siquiera saber cómo está estructurado.
  • En tus declaraciones console.log(), debes especificar de forma explícita cada valor que deseas inspeccionar. Con los puntos de interrupción, Herramientas para desarrolladores te muestra los valores de todas las variables en ese momento específico. A veces, hay variables que afectan tu código que ni siquiera conoces.

En resumen, los puntos de interrupción pueden ayudarte a encontrar y corregir errores más rápido que con el método console.log().

Si retrocedes y piensas en cómo funciona la app, puedes suponer que la suma incorrecta (5 + 1 = 51) se calcula en el objeto de escucha de eventos click asociado al botón Add Number 1 and Number 2. Por lo tanto, te recomendamos pausar el código cerca del momento en que se ejecuta el objeto de escucha click. Las interrupciones del objeto de escucha de eventos te permiten hacer exactamente eso:

  1. En el panel JavaScript Debugging, haz clic en Event Listener Breakpoints para expandir la sección. Las Herramientas para desarrolladores muestran una lista de categorías de eventos expandibles, como Animación y Portapapeles.
  2. Junto a la categoría de evento Mouse, haz clic en Expandir Expandir. Las Herramientas para desarrolladores muestran una lista de eventos del mouse, como click y mousedown. Cada evento tiene una casilla de verificación junto a él.
  3. Marca la casilla de verificación de clic. Herramientas para desarrolladores ahora está configurado para pausar automáticamente cuando se ejecute cualquier objeto de escucha de eventos click.

    La casilla de verificación de clics está habilitada.

  4. En la demostración, vuelve a hacer clic en Add Number 1 and Number 2. Herramientas para desarrolladores pausa la demostración y destaca una línea de código en el panel Sources. Las Herramientas para desarrolladores deben pausarse en esta línea de código:

    function onClick() {
    

    Si hiciste la pausa en una línea de código diferente, presiona Resume Script Execution ALT_TEXT_HERE hasta que el elemento esté pausado en la línea correcta.

Los puntos de interrupción del objeto de escucha de eventos son solo uno de los muchos tipos de puntos de interrupción disponibles en Herramientas para desarrolladores. Vale la pena memorizar todos los tipos diferentes, ya que cada uno te ayudará a depurar diferentes situaciones lo más rápido posible. Consulta Puntos de interrupción para pausar el código para obtener información sobre cuándo y cómo usar cada tipo.

Paso 4: Recorre el código

Una causa común de errores es que la secuencia de comandos se ejecute en el orden incorrecto. Recorrer el código te permite revisar su ejecución, de a una línea a la vez, y determinar con exactitud dónde se está ejecutando en un orden diferente del esperado. Probar ahora:

  1. En el panel Sources de Herramientas para desarrolladores, haz clic en Step into next function call Paso a la siguiente llamada a función para recorrer la ejecución de la función onClick(), una línea a la vez. Herramientas para desarrolladores destaca la siguiente línea de código:

    if (inputsAreEmpty()) {
    
  2. Haz clic en Step over next function call Salta a la siguiente llamada a función.. Herramientas para desarrolladores ejecuta inputsAreEmpty() sin recorrerla. Observa cómo Herramientas para desarrolladores omite algunas líneas de código. Esto se debe a que inputsAreEmpty() se evaluó como falso, por lo que no se ejecutó el bloque de código de la sentencia if.

Esa es la idea básica de recorrer el código. Si observas el código de get-started.js, puedes ver que el error está probablemente en algún lugar de la función updateLabel(). En lugar de recorrer cada línea de código, puedes usar otro tipo de punto de interrupción para pausar el código más cerca de la ubicación probable del error.

Paso 5: Establece un punto de interrupción de línea de código

Los puntos de interrupción de línea de código son el tipo más común de punto de interrupción. Cuando tengas una línea de código específica en la que quieras pausar, usa un punto de interrupción de línea de código:

  1. Observa la última línea de código en updateLabel():

    label.textContent = addend1 + ' + ' + addend2 + ' = ' + sum;
    
  2. A la izquierda del código, puedes ver el número de esta línea de código en particular, que es 32. Haz clic en 32. Las Herramientas para desarrolladores colocan un ícono azul sobre 32. Esto significa que hay un punto de interrupción de línea de código en esta línea. Herramientas para desarrolladores ahora siempre hace una pausa antes de que se ejecute esta línea de código.

  3. Haz clic en Reanudar ejecución de la secuencia de comandos Reanuda la ejecución de la secuencia de comandos. La secuencia de comandos continúa ejecutándose hasta llegar a la línea 32. En las líneas 29, 30 y 31, Herramientas para desarrolladores muestra los valores de addend1, addend2 y sum intercalados junto a sus declaraciones.

Herramientas para desarrolladores pausa en el punto de interrupción de línea de código en la línea 32.

En este ejemplo, Herramientas para desarrolladores hace una pausa en el punto de interrupción de línea de código de la línea 32.

Paso 6: Verifica los valores de las variables

Los valores de addend1, addend2 y sum parecen sospechosos. Están entre comillas, lo que significa que son cadenas. Esta es una buena hipótesis para explicar la causa del error. Ahora es momento de recopilar más información. Herramientas para desarrolladores proporciona muchas herramientas para examinar valores de variables.

Método 1: El panel Permiso

Cuando el código está pausado en una línea de código, el panel Scope te muestra qué variables locales y globales están definidas actualmente, junto con el valor de cada variable. También muestra variables de cierre, cuando corresponde. Haz doble clic en el valor de una variable para editarlo. Cuando no estás en una línea de código, el panel Scope está vacío.

El panel Permiso.

Método 2: Expresiones supervisadas

La pestaña Watch Expressions te permite supervisar los valores de las variables a lo largo del tiempo. Como su nombre lo implica, las expresiones supervisadas no se limitan a variables. Puedes almacenar cualquier expresión válida de JavaScript en una expresión supervisada. Probar ahora:

  1. Haz clic en la pestaña Mirar.
  2. Haz clic en Add Expression Agregar expresión.
  3. Tipo typeof sum.
  4. Presione Intro. Herramientas para desarrolladores muestra typeof sum: "string". El valor que aparece a la derecha de los dos puntos es el resultado de la expresión supervisada.

El panel de expresiones supervisadas

En la captura de pantalla anterior, se muestra el panel Watch Expression (en la parte inferior derecha) después de crear la expresión de reloj typeof sum. Si la ventana de Herramientas para desarrolladores es grande, el panel Watch Expression se encuentra a la derecha, encima del panel Event Listener Breakpoints.

Como se sospecha, sum se evalúa como una cadena, cuando debería ser un número. Has confirmado que esta es la causa del error.

Método 3: La consola

Además de ver los mensajes de console.log(), también puedes usar la consola para evaluar sentencias arbitrarias de JavaScript. En términos de depuración, puedes usar Console para probar posibles correcciones de errores. Probar ahora:

  1. Si no tienes abierto el panel lateral de la consola, presiona Escape para abrirlo. Se abrirá en la parte inferior de la ventana de Herramientas para desarrolladores.
  2. En la consola, escribe parseInt(addend1) + parseInt(addend2). Esta instrucción funciona porque el código está pausado en una línea en la que addend1 y addend2 están dentro del alcance.
  3. Presione Intro. Herramientas para desarrolladores evalúa la instrucción y muestra 6, que es el resultado que esperas que produzca la demostración.

El panel lateral Console después de evaluar las variables que están dentro del alcance

En la captura de pantalla anterior, se muestra el panel lateral Console después de evaluar parseInt(addend1) + parseInt(addend2).

Paso 7: Soluciona el problema

Encontraste una solución para el error. Todo lo que queda es probar la corrección. Para ello, edita el código y vuelve a ejecutar la demostración. No necesitas salir de Herramientas para desarrolladores para aplicar la corrección. Puedes editar el código JavaScript directamente en la IU de Herramientas para desarrolladores. Probar ahora:

  1. Haz clic en Reanudar ejecución de la secuencia de comandos Reanuda la ejecución de la secuencia de comandos.
  2. En el editor de código, reemplaza la línea 31, var sum = addend1 + addend2, por var sum = parseInt(addend1) + parseInt(addend2).
  3. Presiona Comando + S (Mac) o Ctrl + S (Windows y Linux) para guardar los cambios.
  4. Haz clic en Desactivar puntos de interrupción Desactivar puntos de interrupción. Su color cambiará a azul para indicar que está activo. Mientras esté configurado este parámetro, Herramientas para desarrolladores ignorará los puntos de interrupción que hayas establecido.
  5. Prueba la demostración con diferentes valores. Ahora los cálculos se realizan de manera correcta.

Próximos pasos

¡Felicitaciones! Ahora sabes cómo aprovechar al máximo las Herramientas para desarrolladores de Chrome cuando depuras JavaScript. Las herramientas y los métodos que aprendiste en este instructivo pueden ahorrarte muchísimas horas.

En este instructivo, solo se mostraron dos formas de establecer puntos de interrupción. Herramientas para desarrolladores ofrece muchas otras formas, entre las que se incluyen las siguientes:

  • Puntos de interrupción condicionales que solo se activan cuando la condición que proporcionas es verdadera
  • Puntos de interrupción en excepciones detectadas y no detectadas
  • Puntos de interrupción XHR que se activan cuando la URL solicitada coincide con una substring que proporcionas

Consulta Puntos de interrupción para pausar el código para obtener información sobre cuándo y cómo usar cada tipo.

Hay un par de controles para recorrer el código que no se explicaron en este instructivo. Consulta Cómo pasar por la línea de código para obtener más información.