En esta guía de inicio rápido, se muestra cómo usar el Depurador de Cloud para depurar el estado de una aplicación 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
- Accede a tu Cuenta de Google.
Si todavía no tienes una cuenta, regístrate para obtener una nueva.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Comprueba que la facturación esté habilitada en tu proyecto.
- Instala e inicializa el SDK de Cloud.
- 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.
Clona la app en tu computadora local:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Ve al directorio que contiene la app:
cd python-docs-samples/appengine/standard_python3/cloud_debugger
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.
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.
Haz clic en Enviar.
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.
Ve a la página de Depuración en Google Cloud Console:
Asegúrate de tener seleccionado el proyecto correcto.
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:
Asegúrate de que la versión correcta de tu app esté seleccionada:
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.
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”.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 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.
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.
Selecciona la pestaña Punto de registro para incorporar los puntos de registro.
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}")
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
Si deseas verificar que el punto de registro se incorporó con éxito, selecciona la pestaña Historial de puntos de registro.
Actualiza la página para activar el punto de registro.
Si deseas ver los registros que generó el punto de registro, selecciona el panel Registros y haz clic en actualizar refresh.
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.
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.
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 camera_alt con el fin de preparar a Debugger para la instantánea.Si actualizas la página, se activa la instantánea. En el panel Variables, se muestra que la variable
left
es mayor que laright
.Dado que la variable
left
ya es mayor que laright
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.
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]
.
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.
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.
Ve a la página Proyectos de Cloud Console.
Haz clic en Borrar delete junto a tu proyecto.
Escribe el nombre del proyecto para confirmar el cierre.
¿Qué sigue?
Lee nuestros recursos sobre DevOps y explora nuestro programa de investigación.