Instantáneas de depuración

Una vez que implementaste o iniciaste tu aplicación, puedes abrir Stackdriver Debugger en Google Cloud Platform Console. Stackdriver Debugger te permite capturar y también inspeccionar la pila de llamadas y las variables locales en tu aplicación sin detenerla ni ralentizarla.

Visita la página de Depuración de GCP Console para usar Google Stackdriver Debugger.

Antes de comenzar

Stackdriver Debugger se puede usar con o sin acceso al código fuente de tu aplicación. Si tu código fuente no está disponible, consulta Toma una instantánea de depuración a continuación para obtener instrucciones sobre cómo ingresar el nombre de archivo y el número de línea de forma manual.

Para acceder al código fuente que está almacenado de forma local o en un repositorio de Git, es posible que tengas que seleccionar una ubicación de código fuente.

Instantáneas

Las instantáneas de Stackdriver Debugger capturan variables locales y la pila de llamadas en una ubicación de línea específica en el código fuente de tu aplicación. Puedes especificar ciertas condiciones y ubicaciones para mostrar una instantánea de los datos de la aplicación y verla en detalle a fin de depurarla.

Unos segundos después de configurar la ubicación de la línea de una instantánea, esta se aplica a todas las instancias en ejecución de tu aplicación. La primera vez que una instancia ejecuta el código en la ubicación de la instantánea, Stackdriver Debugger toma una instantánea y la pone a disposición para su visualización. El depurador implementa varias estrategias para minimizar la cantidad de latencia causada cuando se capturan los datos.

Toma una instantánea de depuración

Console

Haz clic en el número de línea del código fuente para tomar una instantánea en esa ubicación.

  1. Asegúrate de que el panel Snapshot (Instantánea) esté seleccionado en el panel derecho.
  2. En el panel izquierdo, selecciona el archivo que contiene el código fuente que deseas mirar. El contenido del archivo seleccionado se muestra en el panel central.
  3. Haz clic en el número de línea de la ubicación del código fuente.

Navega a una ubicación de instantánea

Puedes hacer clic en varias líneas para configurar más de una ubicación de instantánea en un archivo.

Consulta la sección Opciones del código fuente para conocer otras formas de cargar tu código fuente a Stackdriver Debugger.

Si no hay un código fuente disponible, puedes ingresar de forma manual filename:line para tomar una instantánea en el panel Snapshot (Instantánea):

Configurar una ubicación de instantánea manualmente

gcloud

Para configurar una ubicación de instantánea desde la línea de comandos:

gcloud debug snapshots create LOCATION

Leyenda:

  • LOCATION es el nombre del archivo y la línea en la que se configura el punto de registro. El formato es FILE:LINE. FILE puede ser el nombre del archivo o el nombre del archivo precedido por los componentes de la ruta de acceso suficientes como para diferenciarlos de otros archivos con el mismo nombre. Es un error proporcionar un nombre de archivo que no sea único en el destino de depuración.

Condiciones de las instantáneas (opcional)

Una condición de instantánea es una expresión simple en el lenguaje de la aplicación (Java, Python y Go son compatibles) que debe evaluarse como verdadera para que se tome la instantánea. Las condiciones de la instantánea se evalúan cada vez que una instancia ejecuta la línea hasta que se evalúe como verdadera o se agote el tiempo de la instantánea.

El uso de las condiciones de instantáneas es opcional.

La condición es una expresión booleana completa que puede incluir operadores lógicos:

travelAccessory == “Towel”
ultimateAnswer <= 42
travelAccessory == “Towel” && ultimateAnswer <= 42

Console

Para especificar la condición, ingrésala en el campo Condition (Condición) en el panel Snapshot (Instantánea).

Configurar una condición de instantánea

gcloud

Las condiciones se especifican con el marcador --condition de snapshots create:

gcloud debug snapshots create LOCATION \
  --condition="ultimateAnswer <= 42 && foo==bar"

Puedes utilizar las siguientes funciones de lenguaje para expresar condiciones:

Java

Se admiten la mayoría de las expresiones de Java, incluidas las siguientes opciones:
  • Variables locales: a == 8
  • Operaciones numéricas y booleanas: x + y < 20
  • Instancia y campos estáticos: this.counter == 20, this.myObj.isShutdown, myStatic o com.mycompany.MyClass.staticMember
  • Comparaciones de strings con el operador de igualdad: myString == "abc"
  • Llamadas a la función. Solo se pueden usar funciones de solo lectura. Por ejemplo, se admite StringBuilder.indexOf(), pero no StringBuilder.append().
  • Conversión de tipos, con tipos totalmente calificados: ((com.myprod.ClassImpl) myInterface).internalField

No se admiten las siguientes funciones de lenguaje:

  • Extracción o "unboxing" de tipos numéricos, como Integer; usa myInteger.value en su lugar.

Python

Se admiten la mayoría de las expresiones de Python, incluidas las siguientes opciones:
  • Lectura de variables locales y globales
  • Lectura de arreglos, listas, segmentos, diccionarios y objetos
  • Llamada de métodos sencillos

No se admiten las siguientes funciones de lenguaje:

  • Llamada a funciones que asignan objetos nuevos o usan construcciones complejas
  • Creación de objetos nuevos dentro de la expresión

Go

Se admite la mayoría de la sintaxis de expresión de Go, incluidas las siguientes opciones:
  • Lectura de variables locales y globales
  • Lectura de arreglos, segmentos, mapas y estructuras

No se admiten las siguientes funciones de lenguaje:

  • Lectura de valores de interfaz
  • Tipo de conversiones y literales de composición
  • Llamadas de función distintas de len

Expresiones (opcional)

La función de expresiones de Stackdriver Debugger te permite evaluar expresiones complejas o recorrer jerarquías de objetos cuando se toma una instantánea. Las expresiones admiten las mismas funciones de lenguaje que las condiciones de instantáneas, que se describieron anteriormente.

El uso de expresiones es opcional.

A continuación, se describen los usos típicos de las expresiones:

  • Para ver variables estáticas o globales que no forman parte del conjunto de variables locales.
  • Para ver con facilidad las variables de miembro profundamente anidadas sin tener que expandir cada vez una variable local en el panel del depurador.
  • Para evitar cálculos matemáticos repetitivos. Por ejemplo, el cálculo de una duración en segundos con (endTimeMillis - startTimeMillis) / 1000.0.

Para agregar una expresión:

Console

  1. Ingresa la expresión en el campo Expressions (Expresiones). Presiona la tecla de tabulación para agregar expresiones adicionales.
  2. Presiona la tecla Intro o el botón Instantánea Botón de instantánea.

El resultado de la expresión se muestra cuando se toma la instantánea.

Configura una expresión

gcloud

Las expresiones se definen con el marcador --expression de snapshots create:

gcloud debug snapshots create LOCATION \
  --expression="histogram.length"

Observa una instantánea

Console

Los datos de la instantánea aparecen en Stackdriver Debugger cuando la aplicación ejecuta el código fuente en la ubicación que especificaste. Las variables de la instancia y las locales aparecen en la sección Variables del panel. El seguimiento de pila aparece en la sección Call Stack (Pila de llamadas) del panel.

Ver instantánea

Puedes examinar el valor de las variables locales en el momento en que se tomó la instantánea y desglosar en estructuras de datos más profundas. También puedes hacer clic en cualquier marco de pila de llamadas y examinar las variables locales en ese nivel en la pila.

Si estableciste varias ubicaciones de instantáneas en un archivo, o para ver las instantáneas que ya tomaste, expande el panel Snapshot History (Historial de instantáneas):

gcloud

A fin de recuperar la URL de GCP Console para una instantánea desde la línea de comandos:

gcloud debug snapshots list

STATUS  LOCATION                   CONDITION  COMPLETED_TIME  ID                  VIEW
ACTIVE  HighScoreService.java:105                             53bd97d4-b6c6-74fc  https://console.cloud.google.com/debug/fromgcloud?project=abc&dbgee=def&bp=ghi

Copia y pega el valor de la columna VIEW en tu navegador para ver la instantánea en GCP Console.

Para ver los datos detallados de la instantánea desde la línea de comandos:

gcloud debug snapshots describe 53bb1240f371b-baa0-feb5d

El comando de describe muestra el seguimiento de pila y los valores de las variables locales y está pensado principalmente para ser legible para la máquina, en lugar de legible para las personas.

---
consoleViewUrl: https://console.cloud.google.com/debug/fromgcloud?project=1234&dbgee=gcp%3A1234%3A843aef0bd82301f7&bp=53bb1240f371b-baa0-feb5d
createTime: '2016-08-22T23:09:32.000Z'
finalTime: '2016-08-22T23:10:16.000Z'
id: 53bb1240f371b-baa0-feb5d
isFinalState: true
location: HighScoreService.java:105
stackFrames:
<... snip ...>

Vuelve a tomar una instantánea

Una instantánea se toma solo una vez. Si deseas tomar otra instantánea de los datos de la aplicación en la misma ubicación, puedes volver a tomarla de forma manual.

Console

Para volver a tomar una instantánea, haz clic en el ícono de la cámara en la parte superior derecha del panel Snapshot (Instantánea):

Botón de instantánea

La nueva instantánea se agrega al panel Snapshot History (Historial de instantáneas). Se puede acceder a las instantáneas anteriores en esa línea desde el Snapshot History (Historial de instantáneas) o desde el marcador en ese número de línea:

Instantáneas anteriores mostradas en el marcador de línea

gcloud

Para volver a tomar una instantánea desde la línea de comandos, repite el comando de create que utilizaste originalmente:

gcloud debug snapshots create LOCATION

Quita una ubicación de instantánea

Console

Para quitar una ubicación de instantánea, haz clic en la X en el marcador de instantáneas.

Ícono de instantánea

gcloud

Para borrar una instantánea de la línea de comandos:

gcloud debug snapshots delete (ID | LOCATION-REGEXP)

Leyenda:

  • ID es el valor que muestra gcloud debug snapshots list.

  • LOCATION-REGEXP es una expresión regular que define la ubicación del código de las instantáneas.

Comparte instantáneas

Puedes compartir una instantánea con otro miembro del proyecto si copias la URL de la instantánea desde tu navegador o desde la salida del comando de gcloud debug snapshots list y se la compartes a otro usuario que tenga acceso a tu proyecto. También puedes guardar esta URL para referencias futuras y volver a verla a fin de ver sus resultados. Stackdriver Debugger utiliza una URL nueva para cada instantánea que se toma. Esto te permite compartir distintos conjuntos de resultados, incluso si se capturaron en la misma ubicación en el código. El uso compartido caduca después de los 30 días desde que se tomó la instantánea.

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

Enviar comentarios sobre...

Documentación de Stackdriver Debugger