Guía de inicio rápido

En esta guía de inicio rápido, se muestra cómo usar Stackdriver Debugger para depurar el estado de una app de Python simple que se ejecuta en App Engine. Además, se muestra cómo realizar lo siguiente:

  • Inspeccionar las variables locales y la pila de llamadas
  • Generar instrucciones de registro
  • Configurar condiciones de instantáneas y usar expresiones

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Instala e inicializa el SDK de Cloud.
  5. Asegúrate de que el siguiente software esté instalado en tu sistema local:

Implementa una app de muestra en App Engine

Comienza por implementar una app de Python 3.7 en App Engine.

  1. Clona la app en tu computadora local:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Ve al directorio que contiene la app:

    cd python-docs-samples/appengine/standard_python37/cloud_debugger
    
  3. Implementa la app en App Engine y ejecuta el comando siguiente:

    gcloud app deploy
    

    Cuando se te solicite, selecciona la región en la que deseas que se ubique tu app de App Engine.

  4. Para ver la app, ejecuta el comando siguiente:

    gcloud app browse
    

    Si no se abre de forma automática una ventana del navegador que muestre la app, haz clic en la URL que aparece en la terminal.

    La app contiene un mensaje para ingresar una string con el campo ya rellenado.

    En la app de muestra, se puede ver un botón de enviar y el campo

  5. Haz clic en Enviar.

    En el resultado de la app de muestra, se pueden ver dos resultados: el resultado del programa y el resultado correcto.

Una vez que hagas clic en Enviar, podrás ver dos resultados. Uno se etiquetó como Resultado del programa (Program Output) y muestra el resultado del método Reverse en el código fuente. El otro se etiquetó como Resultado correcto (Correct Output) y es el resultado de la funcionalidad de la lista inversa de Python.

El Resultado del programa (Program Output) y el Resultado correcto (Correct Output) deben ser iguales. Sin embargo, hay un problema con el código fuente. Usa Debugger para diagnosticar el problema.

Visualiza el código fuente implementado

Una vez que implementaste tu app, puedes ver el código fuente implementado en la página de Depuración de Google Cloud Console.

  1. Ve a la página de Depuración en Google Cloud Console:

    Ir a la página de Depuración

  2. Asegúrate de tener seleccionado el proyecto correcto.

    Este se selecciona del menú desplegable del selector de proyectos resaltado.

  3. Para confirmar que Debugger tiene acceso a los archivos implementados, verifica que los Archivos implementados estén seleccionados y que los archivos de la app estén presentes:

    En el menú desplegable, se muestra que se seleccionaron los archivos implementados.

  4. Asegúrate de que la versión correcta de tu app esté seleccionada:

    En el menú desplegable, se muestra que se seleccionó la versión correcta de la app.

    App Engine mantiene todas las versiones implementadas de una app. Cuando usas Debugger, debes verificar que tengas la versión correcta de la app seleccionada.

    Después de seleccionar el archivo main.py, verás el bloque de código siguiente:

    try:
      import googleclouddebugger
      googleclouddebugger.enable()
    except ImportError:
       pass
    
    import logging
    logging.basicConfig(level=logging.INFO)
    

    En esta sección, se importa y habilita el agente de Debugger con un bloque “try y except”:

    try:
      import googleclouddebugger
      googleclouddebugger.enable()
    except ImportError:
       pass
    
    En esta sección, se configura el registro:

    import logging
    logging.basicConfig(level=logging.INFO)
    

Ahora estás listo para tomar instantáneas de depuración y, también, inyectar puntos de registro de depuración a fin de diagnosticar el problema del código fuente.

Toma una instantánea de depuración

Una instantánea de depuración captura las variables locales y la pila de llamadas que están dentro del alcance en una ubicación de línea.

  1. Haz clic en el número de la línea que contiene la variable tmp para tomar instantáneas de depuración. Aparecerá una flecha azul que indica que se configuró la instantánea, y el panel de resultados mostrará el mensaje “Esperando a tomar una instantánea”.

    En la interfaz del depurador, se muestra que se configuró una instantánea en la línea 47.

  2. Para activar tu instantánea, actualiza la página.

    En el panel de las Variables, se muestran los valores de las variables. Puedes ver que el arreglo chars se propagó de forma correcta la primera vez que pasó por el bucle. No se presentan problemas aquí debido a que se tomó la instantánea la primera vez que se dio la interrupción.

    En el panel de resultados, se muestran los valores de las variables después de que se tomó la instantánea.

    En el panel Pila de llamadas, se muestran los resultados de la pila de llamadas. Puedes hacer clic en las funciones del panel Pila de llamadas para ver las variables locales y los parámetros en ese punto del código. Cuando haces clic en ReverseString, puedes ver que el resultado era correcto.

    En el panel de resultados, se muestran los valores de la pila de llamadas después de que se tomó la instantánea.

Dado que tomar una instantánea y, además, inspeccionar las variables y la pila de llamadas no revelaron el problema, usa los puntos de registro para rastrearlo.

Incorpora un punto de registro de depuración

Un punto de registro de depuración te permite incorporar registros a tu app en ejecución sin tener que reiniciarla.

  1. Selecciona la pestaña Punto de registro para incorporar los puntos de registro.

  2. Haz clic en el número de línea que contiene la variable tmp. Aparecerá un cuadro de texto intercalado. Propaga los campos de la manera siguiente y haz clic en Agregar:

    if (True) logpoint("About to swap two characters. Chars is currently {chars}")
    

    Se establece un punto de registro en la línea 47.

    Un punto de registro tiene la estructura siguiente: if(condition)logpoint(string). Si deseas crear un punto de registro, debes proporcionar dos partes:

    • Una condición, que se debe escribir en la sintaxis del código fuente

    • Una string, que puede contener cualquier cantidad de expresiones escritas entre llaves en la sintaxis del código fuente

  3. Si deseas verificar que el punto de registro se incorporó con éxito, selecciona la pestaña Historial de puntos de registro.

    En la pestaña del historial de puntos de registro, se muestra que se configuró un punto de registro en la línea 18.

  4. Actualiza la página para activar el punto de registro.

  5. Si deseas ver los registros que generó el punto de registro, selecciona el panel Registros y haz clic en .

    En la pestaña de registros, se muestra el resultado del punto de registro.

Diagnostica el problema

Los puntos de registro indican que el bucle while se ejecuta tres veces, pero solo necesita ejecutarse dos veces. Dado que el punto de registro se configura al comienzo del bucle, registró que estaba a punto de intercambiar caracteres en una string que ya estaba revertida en su totalidad.

Los registros muestran que el bucle while se ejecutó tres veces.

A fin de identificar el problema, usa una instantánea de depuración con una condición.

Toma una instantánea de depuración con una condición

La app usa las variables left y right para hacer un seguimiento y detener el intercambio de valores. Cuando la variable left es mayor que la variable right, el bucle debe cerrarse.

Las instantáneas se pueden configurar para activarse según una condición del código fuente. Ya que sabes cuándo debe cerrarse el bucle, usa una instantánea con una condición para aislar el problema.

  1. Para determinar por qué el bucle se ejecuta demasiadas veces, configura la instantánea a fin de que se active en función de la siguiente condición: left > right. Luego, haz clic en el ícono de la cámara con el fin de preparar a Debugger para la instantánea.

    Se configura una instantánea en la línea 47 mediante una instrucción condicional.

  2. Si actualizas la página, se activa la instantánea. En el panel Variables, se muestra que la variable left es mayor que la right.

    Dado que la variable left ya es mayor que la right en este punto del bucle, significa que a medida que el bucle continúa, esta intercambiará los valores una vez más antes de que alcance la línea 50 y salga del bucle.

    En el panel de variables, se muestran los valores de las variables.

Toma una instantánea de depuración con una expresión

Debugger también te permite recuperar expresiones del lenguaje de programación cuando se activa la instantánea. Por ejemplo, puedes recuperar los valores en el arreglo chars con expresiones como chars[1] y chars[2].

  1. Si deseas obtener el valor de una expresión cuando se active una instantánea, escribe la expresión en el campo Expresión. Puedes ingresar varias expresiones.

    Una vez que la instantánea se activa, los valores de la expresión aparecerán sobre el panel Variables.

    En los resultados del campo de expresión, se muestran los valores “c” y “b”.

Soluciona el problema

Las instantáneas y los puntos de registro ayudan a diagnosticar el problema en la app. En este ejemplo, el bucle while se ejecuta muchas veces debido a que if left >= right: break, la declaración que detiene el bucle, se alcanza demasiado tarde para detener la última iteración. Para solucionar el problema, mueve if left >= right: break de la línea 50 a la línea 47.

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta guía de inicio rápido:

  1. Ve a la página Proyectos de Cloud Console.

  2. Haz clic en Borrar junto a tu proyecto.

  3. Escribe el nombre del proyecto para confirmar el cierre.

Próximos pasos

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Stackdriver Debugger