O Cloud Code permite depurar uma aplicação implementada num cluster do Google Kubernetes Engine (GKE) através do skaffold debug.
Pode depurar a sua aplicação num cluster local (como o minikube ou o Docker Desktop), no GKE ou em qualquer outro fornecedor de nuvem.
Com o suporte de depuração do Cloud Code, não tem de concluir a configuração manual, como configurar o encaminhamento de portas ou injetar argumentos de depuração específicos do idioma. A depuração requer uma aplicação GKE pronta para o Cloud Code que inclua um skaffold.yamlficheiro de configuração e uma configuração de lançamento cloudcode.kubernetes.
Depure uma aplicação do GKE
Para começar a depurar a sua aplicação GKE, siga estes passos:
- Na barra de estado do Cloud Code, clique no nome do projeto ativo.  
- No menu de seleção rápida apresentado, selecione Depurar no Kubernetes. 
- Se a sua aplicação não tiver a configuração Skaffold necessária ou a - cloudcode.kubernetesconfiguração de lançamento, o Cloud Code ajuda a configurá-las.
- Confirme se quer usar o contexto do Kubernetes atual para executar a app (ou mude para um contexto preferencial). 
- Se escolheu um cluster remoto como contexto, quando lhe for pedido, escolha um registo de imagens para enviar as imagens. - Se o seu projeto tiver a API Artifact Registry ativada e, pelo menos, um repositório do Artifact Registry, pode procurar e selecionar um repositório do Artifact Registry existente. - Os exemplos seguintes demonstram como especificar onde as imagens de contentores são armazenadas para alguns registos comuns: - Artifact Registry - REGION-docker.pkg.dev/- PROJECT_ID/- REPO_NAME- Docker Hub - docker.io/ - ACCOUNT
 Certifique-se de que tem autenticação adequada se estiver a usar um repositório privado do Docker Hub.- Para gerar o nome final do repositório de imagens, o Cloud Code concatena este registo de imagens com o nome da imagem especificado nos manifestos do Kubernetes. Esta escolha é armazenada na sua - cloudcode.kubernetesconfiguração de lançamento (encontrada em- .vscode/launch.json).- Para mais informações, consulte o guia de processamento do registo de imagens. - O Cloud Code cria os seus contentores, envia-os para o registo, aplica as configurações do Kubernetes ao cluster e aguarda a implementação. - Após a implementação, o Cloud Code encaminha automaticamente todas as portas de contentores declaradas para a sua máquina e apresenta os URLs na janela de saída para que possa procurar a sua aplicação em direto. 
- Para cada contentor depurável na sua aplicação, confirme ou introduza o diretório no contentor remoto onde o programa que quer depurar está localizado. - Em alternativa, pode premir ESC para ignorar a depuração do contentor.  - O Cloud Code anexa uma sessão de depuração para cada contentor depurável na aplicação. - Agora, pode realizar as mesmas tarefas que faz normalmente quando depura código local, como definir pontos de interrupção e percorrer o código passo a passo, num cluster Kubernetes em direto. - Por predefinição, quando uma alteração à sua aplicação é guardada automaticamente, o Cloud Code volta a implementar a aplicação e configura uma nova sessão de depuração. Pode ativar/desativar esta funcionalidade com a flag - watchna configuração de lançamento do seu projeto.
- Para inspecionar variáveis e informações de pilha, use a barra lateral de depuração. Para interagir com a sessão de depuração, use a consola de depuração no depurador do painel inferior. 
- Após a conclusão da sessão, pode usar os seguintes comandos do menu de contexto: - Abrir registos de implementação: abra os registos da aplicação de uma implementação específica com o explorador de registos do Cloud Code.
- Abrir URL do serviço: abra o URL do serviço da aplicação de um serviço específico num navegador de Internet
 
- Se tiver desativado o modo de observação na configuração de lançamento e quiser fazer alterações à aplicação, reconstruir e voltar a implementar a aplicação, no painel Sessões de desenvolvimento, pause a ação de execução e, de seguida, clique em  Reconstruir e voltar a implementar a aplicação. Reconstruir e voltar a implementar a aplicação.
- Para terminar a sessão de depuração, clique em  Parar na barra de ferramentas de depuração. Parar na barra de ferramentas de depuração.- Depois de terminar a sessão de depuração, todos os recursos do Kubernetes implementados são eliminados do cluster. 
Detalhes da configuração
O Cloud Code, com tecnologia Skaffold, processa automaticamente os seguintes detalhes de configuração para todos os idiomas suportados:
- Encaminhamento de porta da porta de depuração para que o depurador possa ser anexado.
- Anexar um depurador a um ou mais contentores depuráveis na sua aplicação.
Se a sua aplicação tiver vários contentores depuráveis (contentores cuja linguagem é suportada pela depuração do Cloud Code) configurados no skaffold.yaml, é anexado um depurador a cada contentor depurável.
- Manter as definições de mapeamento de origem entre sessões. Pode personalizar estas definições editando diretamente o ficheiro .vscode/launch.json.
O Cloud Code também processa os seguintes detalhes de configuração específicos do idioma:
Node.js
Reescrever o ponto de entrada para invocar:
node --inspect=localhost:9229
Python
Instalar o módulo ptvsd
usando um contentor de inicialização e reescrevendo o ponto de entrada para invocar:
python -m ptvsd --host localhost --port 5678
Go
Instalar o depurador
dlv
usando um contentor de inicialização e reescrevendo o ponto de entrada de modo que a sessão de depuração iniciada seja executada apenas com um servidor de depuração (no modo sem interface), continua o processo depurado no início, aceita várias ligações de clientes e ouve em
localhost:56268:
  dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --
Java
Adicionar um ambiente JAVA_TOOLS_OPTIONS com a configuração do protocolo Java Debug Wire (JDWP) adequada, de modo que o agente de depuração JDWP ouça uma ligação de socket na porta 5005 e permita que a VM comece a executar antes de o depurador ser anexado:
  jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y
Para mais detalhes sobre a depuração com tecnologia Skaffold, consulte a
skaffold debug documentação.
Configure o contentor
Para preparar o contentor para a depuração, siga as instruções para o idioma que está a usar:
Node.js
- Inicie a aplicação Node.js com --inspect=<debugPort>ondedebugPortvem da configuração de associação. Por exemplo:CMD ["node", "--inspect=9229", "index.js"]
Python
- Certifique-se de que tem o módulo
ptvsdinstalado na sua máquina e no seu contentor.
- Inicie a aplicação Python através do ptvsd. Faça corresponder a porta especificada ao campodebugPortna configuração de associação. Por exemplo:CMD ["python", "-m", "ptvsd", "--port", " " , "app.py"]
Go
- Certifique-se de que tem o pacote
dlvinstalado na sua máquina e no contentor Go.
- Inicie a aplicação Go através de - dlv debug.- A porta especificada no comando de início deve ser igual ao valor do atributo - debugPortna configuração de associação. Por exemplo:- CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"] - Sugestão de resolução de problemas: quando depura uma aplicação Go, a aplicação para e aguarda a anexação de um depurador. Anexe um depurador para que o serviço seja iniciado. 
Java
- Certifique-se de que a JVM está instalada na sua máquina.
- Inicie a aplicação Java com as seguintes opções, em que - debugPortvem da configuração de associação.- -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address= - ,quiet=y - Por exemplo, para iniciar a aplicação Java no modo de depuração e ouvir na porta - debugPortpara ligação:- ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"] 
.NET Core
- Certifique-se de que tem o - vsdbg, o depurador de linha de comandos do .NET Core da Microsoft, instalado no contentor do Kubernetes.- Por exemplo: - RUN apt-get update 
 && apt-get install -y --no-install-recommends unzip
 && apt-get install -y procps
 && rm -rf /var/lib/apt/lists/*
 && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /dbg/netcore/vsdbg
Configure a configuração de associação
Para anexar a um contentor depurável, tem de ter uma
configuração de anexação
do tipo cloudcode.kubernetes.
Adicione um ficheiro .vscode/launch.json
Se o seu projeto não tiver um ficheiro launch.json na respetiva pasta .vscode, pode adicionar um através do painel de depuração.
- Para navegar para o painel de depuração, clique em  Depurar
na barra de atividade. Depurar
na barra de atividade.
- Selecione Adicionar configuração no menu pendente. 
- Selecione Cloud Code: Kubernetes como ambiente.  
- Selecione a opção Anexar ao pod do Kubernetes.  
- Selecione a linguagem de programação que está a usar. - Esta ação cria e abre um ficheiro - launch.jsonpara o seu projeto e cria uma configuração de anexação para si.
- Atualize os atributos de configuração no ficheiro - launch.jsonpara corresponder aos do seu projeto. Para mais informações sobre os atributos de configuração, consulte o artigo Atributos de configuração.
Adicione uma configuração de associação ao ficheiro .vscode/launch.json
Para adicionar uma nova configuração de anexação a um ficheiro .vscode/launch.json existente:
- Abra o ficheiro launch.json.
- Para invocar o Intellisense do fragmento, clique em Adicionar configuração.
- Para adicionar uma configuração de associação, selecione o fragmento Cloud Code: Attach to Kubernetes Pod para o idioma que está a usar.
- Atualize os atributos na configuração para corresponder aos do seu projeto. Para mais informações sobre os atributos de configuração, consulte o artigo Atributos de configuração.
Atributos de configuração
| Atributo | Descrição | 
|---|---|
| debugPort | Porta de depuração usada no contentor. | 
| podSelector | Conjunto de pares de chave-valor usado para selecionar o pod de depuração. Para mais
   informações, consulte o
   guia sobre seletores).
   O exemplo seguinte mostra um podSelectortípico:
  "podSelector": {
    "app": <deployment-name>
  }
   | 
| localRoot | Caminho para o diretório local que contém o programa a ser depurado. A predefinição é ${workspaceFolder}. | 
| remoteRoot | Caminho absoluto para o diretório remoto que contém o programa a ser depurado (no contentor do Kubernetes). | 
Anexe um depurador ao seu pod do Kubernetes
O Cloud Code para o Cloud Shell suporta a associação de um depurador a um pod do Kubernetes para Node.js, Python, Go, Java e .NET. Só precisa de um contentor depurável e de uma configuração de associação do tipo cloudcode.kubernetes.
Para obter informações sobre a diferença entre associar-se a um pod do Kubernetes e depurar uma aplicação Kubernetes, consulte o artigo Como a associação de um depurador a um pod difere da depuração de uma aplicação Kubernetes.
Para anexar um depurador ao seu pod do Kubernetes, execute as seguintes tarefas:
- Para navegar para o painel de depuração, clique em
 Depurar
na barra de atividade. Depurar
na barra de atividade.
- Selecione e inicie a configuração premindo - F5.- localhost:${debugPort}é encaminhado por porta para- debugPortno contentor durante a depuração.
 - A sessão de depuração foi configurada com êxito. Pode realizar as tarefas que normalmente faz quando depura código local, como definir pontos de interrupção e percorrer o código passo a passo. 
- Para inspecionar variáveis e informações de pilha, use a barra lateral de depuração. Para interagir com a sessão de depuração, use a consola de depuração no depurador do painel inferior. 
- Para terminar a sessão de depuração, clique em  Parar
na barra de ferramentas de depuração. Parar
na barra de ferramentas de depuração.
Como a associação de um depurador a um pod difere da depuração de uma aplicação Kubernetes
| Anexe a um pod do Kubernetes | Depure uma aplicação Kubernetes | 
|---|---|
| Depura um único pod do Kubernetes. | Depura todos os contentores depuráveis na aplicação. | 
| A aplicação tem de estar em execução no pod do Kubernetes antes da depuração. | Executa a aplicação no cluster do Kubernetes e anexa o depurador. | 
| Usa a configuração (.vscode/launch.json) do tipo cloudcode.kubernetese pedeattach. | Usa a configuração (.vscode/launch.json) do tipo cloudcode.kubernetese pedelaunch.Para mais informações, consulte o artigo Configurações de lançamento versus anexação. | 
| Exemplo de configuração: 
{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
 | Exemplo de configuração: 
{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
 | 
| Não é possível usar esta configuração para executar a aplicação. | Esta configuração pode ser usada para executar ou depurar a aplicação. | 
| Esta configuração é específica do idioma. | Esta configuração não é específica do idioma. | 
| Nenhum comando dedicado. | Comando Debug on Kubernetes. | 
O que se segue?
- Use a sincronização de ficheiros e o recarregamento rápido para acelerar o desenvolvimento.
- Configure um ambiente de desenvolvimento contínuo no Cloud Code.
- Ver registos do Kubernetes no Cloud Code.