Como trabalhar com snapshots

Depois de configurar a depuração no Cloud Debugger e implantar ou iniciar o app, é possível tirar ou visualizar snapshots de depuração no console de origem.

Visão geral dos snapshots

Os snapshots capturam variáveis locais e a pilha de chamadas em um local de linha específico no código-fonte do seu aplicativo. É possível retornar um snapshot do estado do seu aplicativo com base nas condições e nos locais de linha especificados. Os detalhes do snapshot podem ajudar você a depurar seu código.

Alguns segundos depois de definir o local da linha, as configurações do snapshot são aplicadas a todas as instâncias em execução do aplicativo. Na primeira vez que uma instância executar o código no local do snapshot, o Debugger o captura e o disponibilizará para visualização. O Debugger implementa várias estratégias para minimizar a latência causada ao capturar dados.

Os snapshots podem não estar disponíveis durante a inicialização, enquanto o debugador é inicializado.

Capturar um snapshot de depuração

  1. No Console do Google Cloud, abra o Cloud Source Repositories.

    Abrir o Cloud Source Repositories

    A página Todos os repositórios é aberta. Se preferir, abra a visualização Minha origem.

  2. Clique no nome de um repositório e acesse o arquivo que contém o código-fonte que você quer assistir.

  3. Clique no número de linha em que está o local do código-fonte.

    Selecionar local do snapshot

  4. Quando solicitado, selecione o aplicativo que você quer depurar e clique em Continuar.

    Selecionar aplicativo do snapshot

  5. Clique em Criar snapshot.

    Criar snapshot

    O novo snapshot é exibido em um painel adjacente do Console do Google Cloud.

    Novo snapshot

Condições do snapshot (opcional)

Uma condição do snapshot é uma expressão que precisa ser avaliada como true para que ele seja capturado. As expressões em Java, Python e Go são compatíveis. As condições do snapshot são avaliadas sempre que uma instância executa a linha até que a condição seja avaliada como true ou até que o snapshot expire.

A condição é uma expressão booleana completa que pode incluir operadores lógicos:

travelAccessory == "Towel"
ultimateAnswer <= 42
travelAccessory == "Towel" && ultimateAnswer <= 42

Definir uma condição de snapshot

  1. No Console do GCP, clique na guia Snapshot e selecione um deles.

    Selecionar snapshot

  2. Depois que o painel do Snapshot abrir, clique Editar snapshot.

    Editar snapshot

  3. No campo Condição, insira a condição do snapshot.

  4. Clique em Atualizar.

É possível usar os recursos de linguagem a seguir para expressar condições:

Java

A maioria das expressões em Java é compatível, incluindo estas:
  • Variáveis locais: a == 8.
  • Operações numéricas e booleanas: x + y < 20.
  • Campos estáticos e de instância: this.counter == 20, this.myObj.isShutdown, myStatic ou com.mycompany.MyClass.staticMember.
  • Comparações de strings com o operador de igualdade: myString == "abc".
  • Chamadas de funções. Apenas as funções somente leitura podem ser usadas. Por exemplo, StringBuilder.indexOf() é compatível, mas StringBuilder.append() não é.
  • Transmissão de tipo, com tipos totalmente qualificados: ((com.myprod.ClassImpl) myInterface).internalField.

Os seguintes recursos de linguagem não são compatíveis:

  • Conversão unboxing de tipos numéricos, como Integer. Use myInteger.value em vez disso.

Python

A maioria das expressões em Python é compatível, inclusive estas:
  • Leitura de variáveis locais e globais
  • Leitura de matrizes, listas, frações, dicionários e objetos.
  • Chamada de métodos simples.

Os seguintes recursos de linguagem não são compatíveis:

  • Execução de funções que alocam novos objetos ou usam executores complexos
  • Criação de novos objetos dentro da expressão.

Go (Beta)

A maioria das sintaxes de expressão em Go (em inglês) é compatível, incluindo estas:
  • Leitura de variáveis locais e globais
  • Leitura de matrizes, conjuntos, mapas e structs

Os seguintes recursos de linguagem não são compatíveis:

  • Leitura a partir de valores da interface
  • Conversões de tipo e literais compostos
  • Chamadas de função que não sejam len

Expressões (opcional)

Com as expressões de snapshot, é possível avaliar expressões complexas ou atravessar hierarquias de objetos quando um snapshot é tirado. As expressões são compatíveis com os mesmos recursos de linguagem das condições do snapshot descritas anteriormente.

Veja a seguir os usos comuns para expressões:

  • Visualizar variáveis estáticas ou globais que não fazem parte do conjunto de variáveis locais.

  • Visualizar variáveis de membro profundamente aninhadas sem precisar expandir uma variável local no painel do depurador toda vez.

  • Evitar cálculos matemáticos repetitivos. Por exemplo, calcular uma duração em segundos com (endTimeMillis - startTimeMillis) / 1000.0.

Adicionar uma expressão

  1. No painel inferior do Console do GCP, clique na guia Snapshot e selecione um deles.

    Selecionar snapshot

  2. No painel que é aberto, clique em Editar snapshot.

    Editar snapshot

  3. No campo Expressão, insira a expressão.

    Se você quiser adicionar expressões, pressione a tecla Tab.

  4. Clique em Atualizar.

Visualizar um snapshot

Os dados do snapshot aparecem no console de origem depois que o aplicativo executa o código no local especificado.

  1. No painel inferior do Console do GCP, clique na guia Snapshot e selecione um deles.

    Selecionar snapshot

    Um painel com os detalhes do snapshot exibe valores de variáveis de instância e o rastreamento de pilha no local do código do snapshot.

    Visualizar snapshot

    É possível examinar o valor das variáveis locais no momento em que o snapshot foi capturado e detalhar estruturas de dados mais profundas. Também é possível clicar em qualquer frame de pilha de chamada e analisar as variáveis locais naquele nível da pilha.

Recapturar snapshot

Um snapshot só é capturado uma vez. Para capturar outro snapshot do estado do aplicativo no mesmo local, siga estas etapas:

  1. No painel Snapshots do Console do GCP, mantenha o ponteiro do mouse sobre o snapshot.

  2. Clique em Recapturar.

Recapturar snapshot

Remover um local de snapshot

  1. No painel Snapshots do Console do GCP, mantenha o ponteiro do mouse sobre o snapshot.

  2. Clique em Excluir .

Compartilhar snapshots

É possível compartilhar um snapshot com outro membro do projeto. Basta compartilhar o URL do snapshot a partir do seu navegador. Também é possível salvar esse URL para referências futuras e depois retornar para consultar os resultados. O Debugger usa um novo URL para cada snapshot capturado. Isso permite que você compartilhe conjuntos distintos de resultados, mesmo que eles tenham sido capturados no mesmo local no código.

A seguir