v2.0

Debug e Depuração

Depure o agente durante o desenvolvimento, direto no Agent Builder: execução em modo debug, acompanhamento visual da ação e técnicas para encontrar a causa dos problemas.

Debug × Trilha de Auditoria

São duas ferramentas diferentes, para momentos diferentes:

FerramentaQuando usar
Debug (esta página) Durante o desenvolvimento, no Agent Builder. Você executa a versão em desenvolvimento, acompanha a ação do navegador e ajusta o fluxo até funcionar.
Trilha de Auditoria Depois, na operação. É o histórico oficial das execuções, com logs, evidências e severidades para investigar o que já rodou.
Debug não grava na Trilha de Auditoria Uma execução em modo Debug não gera nenhum registro na Trilha de Auditoria, e nada do que você vê ali fica salvo para consulta depois. O painel Log de Execução (o console ao lado do canvas) é o substituto momentâneo: ele expõe, em tempo real, o mesmo nível de detalhe que uma execução em produção gravaria na Trilha de Auditoria, mas só existe enquanto a aba estiver aberta. Feche a aba ou navegue para outro lugar e esse histórico desaparece.

Executar em modo Debug

Na segunda fileira do cabeçalho do Agent Builder, use o botão Debugar para disparar uma execução de depuração da versão aberta:

Controles de execução no cabeçalho
Os controles de execução: Debugar, Pausar em falhas, Assistir ao vivo e Console.
Debug não consome crédito, mas ainda depende de ter saldo Uma execução em Debug nunca debita crédito, mesmo rodando do início ao fim. Mas a autorização pra iniciar qualquer execução, Debug incluído, passa pela mesma checagem de saldo da empresa. Ou seja: se o saldo de créditos normais estiver zerado, o Debug também é recusado até o próximo reset mensal ou um upgrade de plano, mesmo sem custar nada quando roda. Veja Política de Créditos.

Pausar manualmente

O botão Pausar (que substitui o Debug enquanto a execução roda) pode ser acionado a qualquer momento, independente de haver falha. Pausa a execução até você clicar em Retomar.

Pausar em falhas (breakpoint)

O botão Pausar em falhas é um interruptor: quando ativo, a falha de uma etapa pede a pausa da execução, e aparece um banner identificando a etapa que falhou. A pausa é aplicada no limite entre etapas, então a Gestão de Erros e Exceções daquela etapa ainda decide o que fazer com o erro: se ela manda tentar de novo, o processo pausa antes da nova tentativa; se ela manda encerrar, o processo encerra e não há o que retomar. O banner traz duas opções:

Banner Pausado em falha com botões Continuar e Parar execução
Pausado em falha: a etapa que falhou, os botões Continuar/Parar execução, e o console de log mostrando o erro em detalhe.
Use Pausar em falhas como um breakpoint genérico enquanto ajusta um fluxo novo. Você inspeciona o estado exato no momento do erro (a mensagem, a evidência anexada, o valor das variáveis) antes de decidir se o bypass configurado é aceitável ou se o fluxo precisa de ajuste.

Acompanhamento visual da ação

Com a execução em andamento, o próprio canvas do Agent Builder vira o painel de acompanhamento: cada card ganha uma borda colorida conforme seu status, e um painel de Log de Execução abre à direita com contadores e um console rolável com o evento de cada etapa em tempo real:

Cor da bordaContadorSignificado
🟢 VerdeSucessoEtapa executada com sucesso
🔴 VermelhoFalhasEtapa que falhou
⚪ CinzaAnuladasEtapa pulada (condição de execução não satisfeita, ou rota que não passou por ela)
Canvas durante uma execução de debug
Bordas verdes nas etapas concluídas e vermelha na que falhou. À direita, os contadores do ciclo e o console detalhando o erro.
Esse acompanhamento ao vivo (bordas coloridas + log em tempo real) só aparece em execuções de debug. Execuções normais de produção não mostram esse painel (elas vão para a Trilha de Auditoria depois de concluídas).

Copiar uma linha do log

Cada linha do console traz um ícone de cópia no final. Clique nele e a linha inteira vai para a área de transferência, já limpa: sem o próprio ícone e com os espaços normalizados, pronta para colar num chamado, num commit ou numa conversa com quem vai ajudar a investigar.

O ícone vira um ✓ por um instante para confirmar que copiou. É por linha, e não pelo log inteiro, justamente porque o que interessa quase sempre é uma mensagem de erro específica, não o histórico completo.

O console guarda as últimas 300 linhas Passando disso, as mais antigas saem conforme as novas chegam. Em execuções longas ou com loop, copie a linha que interessa assim que ela aparecer, em vez de deixar para o fim.
Um duplo clique fecha os painéis de debug Dois cliques em qualquer área livre da tela recolhem o console, o painel de execução e o Copilot de uma vez, e devolvem os cards ao estado neutro. Nada é apagado: o log da última sessão continua acessível pelo botão de console no cabeçalho. O conteúdo só é zerado quando um novo debug começa.

Assistir ao vivo

O botão Assistir ao vivo abre um modal com uma transmissão ao vivo da tela que o runtime está controlando naquele instante. Não é uma captura periódica, é um streaming contínuo de quadros da página real, enquanto a execução avança:

Modal Assistir ao vivo mostrando a página sendo automatizada em tempo real
Assistir ao vivo: o indicador "● AO VIVO" confirma que os quadros estão chegando em tempo real.

O indicador no canto muda conforme o estado da transmissão:

A aba Variáveis

O console tem duas abas. LOGS é o histórico de eventos que a execução vai escrevendo. VARIÁVEIS mostra o estado do processo: todas as variáveis que a execução criou até ali e o valor que cada uma carrega naquele momento. A lista se preenche sozinha conforme as tarefas terminam, sem precisar clicar em nada.

É a resposta para a pergunta que aparece em todo debug: o que essa etapa colocou de fato na variável? Em vez de caçar a linha certa no log, você abre a aba e lê o valor.

O número ao lado do título conta quantas variáveis existem. Quando algo muda enquanto você está na aba de logs, um ponto azul avisa no título, sem trocar a aba embaixo de você.

Console do debug na aba Variáveis, com filtro e gaveta de variáveis de sistema
As duas abas do console. Na aba VARIÁVEIS, o contador de variáveis do processo, o campo de filtro e, no rodapé, a gaveta Variáveis de sistema aberta.

O que cada linha mostra

ElementoO que significa
NomeO nome da variável. Quando ela tem um identificador interno além do nome, as duas formas viram uma linha só, com o nome legível na frente.
TipoTexto, número, booleano, lista ou objeto. Serve para explicar comparações que "deveriam" funcionar: o número 10 e o texto "10" aparecem diferentes aqui.
TamanhoAparece a partir de 1 KB. É o tamanho real do valor, mesmo quando a tela mostra só um pedaço.
ValorAs primeiras linhas do conteúdo. Clique no nome para abrir o valor inteiro; clique de novo para recolher.
Etapa de origemQual tarefa escreveu aquele valor por último.
Destaque azulA variável acabou de mudar, na tarefa que terminou agora.

O campo no topo filtra a lista, e procura tanto no nome quanto no valor. Achar em qual variável foi parar um número específico é o caso mais comum: cole o número no filtro e sobra só a linha que o contém.

Variáveis criadas por script

Variável que nasce dentro de um script Python ou Node aparece na aba como qualquer outra, desde que o script a devolva para o fluxo. O que fica só na memória do script, sem ser devolvido, não existe para o processo e por isso não aparece aqui. Não confunda com as listas de variáveis do builder: elas já mostram, antes de qualquer execução, os nomes que o script escreve no bm.done() (veja Manipulação de Variáveis: Script), enquanto esta aba mostra o que foi de fato gravado nesta execução, inclusive os nomes que o script monta em tempo de execução.

Variáveis de sistema

No rodapé da aba fica a gaveta Variáveis de sistema, sempre visível, com o número de chaves ao lado. Clique para abrir. São as variáveis que a plataforma mantém sozinha, como a etapa atual, o contador de etapas executadas e o tempo decorrido. Elas ficam separadas para não competir com as variáveis do seu processo, e o filtro alcança as duas listas: se o termo casar lá dentro, a gaveta abre sozinha e mostra quantas chaves casaram. A lista completa está em Manipulação de Variáveis.

Credenciais do Cofre

Segredo aparece, valor não Variável que carrega uma credencial do Cofre de Senhas aparece na lista com um cadeado no lugar do conteúdo. A linha existe para você saber que a variável foi preenchida, mas o valor não sai do ambiente de execução em momento algum, nem para a tela.

Valores grandes

O painel mostra o começo de valores muito grandes e avisa, embaixo da linha, qual é o tamanho total. O retorno inteiro de uma consulta com milhares de registros não cabe na tela nem ajuda a ler, e a forma do dado, que é o que interessa para mapear, já aparece nas primeiras linhas. Para trabalhar com a resposta crua completa, use a técnica de ler a resposta crua na aba de logs.

Quando a etapa falha

A aba também atualiza quando uma tarefa quebra, e a origem da variável aparece marcada em vermelho com a palavra (falhou). Esse é o estado exato do processo no instante do erro, que costuma ser a informação mais útil de todo o debug: dá para ver o que já tinha sido preenchido e o que ainda estava vazio quando a etapa parou.

Ao retomar de uma etapa

Quando você usa Reiniciar daqui, a execução começa com a massa de dados das tarefas anteriores já carregada. Essa massa herdada aparece na aba desde o início, com a origem Estado inicial, para você conferir com o que o processo está entrando na etapa antes mesmo de ela rodar.

A aba é só de leitura Ela mostra o que a execução produziu, e não aceita edição. Para mudar o valor com que uma etapa trabalha, use o 📌 Fixar a saída: ali o valor pode ser editado à mão e passa a valer nas próximas execuções de debug, que é o gesto que a plataforma sabe reproduzir.
A aba nasce vazia até a primeira tarefa terminar A lista é atualizada no fim de cada tarefa, e não a cada instrução dentro dela. Numa etapa demorada, os valores dela aparecem de uma vez quando ela termina; a aba de logs continua mostrando o que está acontecendo enquanto isso. Se a aba continuar vazia depois de várias tarefas concluídas, o ambiente de execução provavelmente está numa versão anterior a este recurso: atualize o runtime em Ambientes Runtime.

Ações de debug em cada etapa

Passe o mouse sobre um card no canvas: acima dele aparece uma barrinha com três ações que existem só para o debug. Elas são o que evita ter que rodar o processo inteiro do zero a cada tentativa.

Barra de ações de debug acima de um card
As três ações acima do card, da esquerda para a direita: reiniciar daqui, fixar a saída e ignorar execução.
AçãoO que faz
▶ Reiniciar daqui Começa uma execução a partir desta etapa, reaproveitando o estado que o processo tinha ao terminar a etapa anterior. As etapas antes dela não rodam de novo.
📌 Fixar a saída Congela o resultado da etapa. Nas execuções seguintes, ela devolve o valor fixado sem executar de verdade.
🚫 Ignorar execução Marca a etapa para ser pulada durante o debug, sem apagá-la nem alterar o fluxo publicado.

Cards com alguma dessas marcas mostram um selo permanente: 📌 para fixada e 🚫 para ignorada. Assim você reconhece, de relance, que aquele trecho não está rodando como rodaria em produção.

Reiniciar daqui

Ao fim de cada etapa executada em debug, a plataforma guarda um retrato do estado do processo naquele ponto. É esse retrato que permite retomar do meio.

O botão ▶ de uma etapa só fica ativo quando a etapa anterior já tem esse retrato, ou seja, depois de pelo menos uma execução que tenha chegado até ali. Ao clicar, o debug começa direto na etapa escolhida, com as variáveis já preenchidas como estavam.

É aqui que o tempo de depuração cai Num processo que faz login, navega por várias telas e só então chega na etapa problemática, corrigir e testar de novo custaria todo o caminho outra vez. Com o retomar, você ajusta a etapa e roda só a partir dela.
Não é possível retomar com um debug em andamento. Encerre a execução atual antes.

Fixar a saída (📌)

Fixar congela o que a etapa produziu, para que as execuções seguintes não precisem refazer o trabalho. Serve para etapas lentas, caras ou instáveis que já estão funcionando e não são o alvo da investigação: uma consulta pesada, uma chamada de IA, um portal externo que responde devagar.

  1. Rode o debug uma vez, até a etapa executar. Sem isso não há o que fixar, e a plataforma avisa.
  2. Clique no 📌 acima do card. A etapa é fixada e o editor de valores abre.
  3. Confira os valores. Cada variável produzida pela etapa aparece numa linha, e você pode editar qualquer uma antes de salvar.
Editor de valor fixado aberto abaixo do card
O editor abre abaixo do card, com uma linha por variável que a etapa produziu. O contorno azul marca a etapa fixada.

Clicar no 📌 de uma etapa já fixada reabre esse editor a qualquer momento, com Salvar e Desafixar. Valores em texto, número, lista e objeto são aceitos: o campo interpreta o que você digitar e converte quando faz sentido.

Campos sensíveis aparecem em branco Uma variável marcada como Dado sensível nunca é copiada para o valor fixado: ela aparece em branco no editor. Se quiser um valor para o teste, digite à mão, e só o que você digitar é gravado.
Fixar também serve para testar cenário difícil de reproduzir Editando o valor fixado, você força o processo a seguir por um caminho específico sem depender do sistema externo devolver aquele dado. É a forma de exercitar a rota de erro, o registro rejeitado ou a lista vazia que quase nunca aparece em teste.
Fixar e ignorar valem só no debug Nenhuma das duas marcas altera o processo publicado. Em produção, a etapa executa normalmente. Ainda assim, deixe o modelo limpo antes de publicar: uma etapa fixada esquecida faz o debug seguinte mentir para você.
Retorno muito grande não é fixado Os valores guardados pelo debug têm teto de tamanho. Uma consulta que devolve dezenas de milhares de linhas passa desse teto, e a variável correspondente aparece no editor com um aviso no lugar do conteúdo, dizendo quanto ela ocupava. O log de execução também registra o corte, nomeando a variável.

Quando isso acontece, o 📌 e o ▶ reiniciar daqui não têm o valor para reaproveitar: a etapa precisa executar de verdade. A saída é reduzir o retorno, com LIMIT na consulta ou mapeando só as colunas que o processo usa. Continua sendo possível conferir o que veio: o log de execução mostra uma amostra das primeiras linhas.

Etapas de Decisão não têm o 📌, porque elas não produzem valor próprio, apenas escolhem o caminho.

Ignorar execução (🚫)

Marca a etapa para ser pulada no debug. Diferente de fixar, nada é devolvido no lugar: a etapa simplesmente não acontece. Use para tirar do caminho um trecho que atrapalha o teste, como o envio de um e-mail de verdade, uma escrita em sistema de produção ou uma etapa que você já sabe que falha e não é o foco agora.

Clicar de novo reativa a etapa.

Técnicas de Debug

1. Modo de execução lenta

Nas Configurações Gerais, configure o Atraso na Execução em ~2000 ms e responda "não" em Rodar o navegador em segundo plano (headless)?. Você vê o agente operando em câmera lenta no navegador.

2. Logs granulares

Adicione bm.bmLog() antes e depois de cada operação crítica no código customizado (Logs Customizados). Use os prefixos {application_*} para classificar a severidade de cada mensagem.

3. Evidência em todas as etapas

Temporariamente ative Gerar Evidência? em todas as etapas de navegador para ter um "filme" visual da execução (Screenshot). Desative quando terminar o debug.

4. Ler a resposta crua de uma chamada de API ou de conector

Toda etapa Chamar API Rest despeja no console a resposta completa do serviço, marcada com 📥 e formatada para leitura. Você vê o JSON exatamente como chegou, antes de qualquer mapeamento. O mesmo vale para os conectores: a linha de retorno traz a resposta do serviço, e no caso dos conectores de banco, uma amostra das linhas da consulta em JSON.

É o caminho mais direto para resolver as duas dúvidas mais comuns nessas etapas:

Outros dois avisos aparecem no console dessas etapas sem que você precise procurar:

Para conferir a chamada antes de rodar o processo, a seção Resultados da etapa tem o botão Testar chamada, que dispara a requisição a partir da tela de configuração.

A amostra é limitada de propósito Um retorno grande não sai inteiro no terminal: a linha mostra as primeiras linhas e diz quantas ficaram de fora. É o comportamento certo, porque o terminal existe para ser lido, e milhares de registros na tela não ajudam ninguém. Para mapear, porém, você não precisa do retorno inteiro: precisa da forma dele, e um registro já mostra toda a forma. Se o texto que você copiou do terminal veio cortado, copie apenas um registro completo, do primeiro { até o } que o fecha, e cole em Outras formas de mapear, no conector.
Use o ícone de cópia da linha para levar o JSON inteiro para um editor e conferir a estrutura com calma.

5. Inspecionar variáveis no código

Para ver o estado das variáveis em um ponto específico:

Node.js: dump do estado das variáveis
bm.bmLog('[DEBUG] variáveis: ' + JSON.stringify(bm.globalData, null, 2));

6. Teste com parâmetros específicos

Ao executar manualmente, informe parâmetros de inicialização com dados que você sabe que causam o problema, para reproduzir o bug de forma determinística.

Problemas comuns e soluções

ProblemaCausa provávelSolução
Elemento não encontrado (timeout) Seletor CSS errado ou página não carregou Verifique o seletor com F12 no Chrome. Aumente o Limite de Busca de Seletores. Adicione etapa de aguardar carregamento.
Página não carregou (timeout de navegação) Site lento ou conexão instável no runtime Aumente o Limite de Carregamento de Páginas. Verifique a conectividade do Ambiente Runtime.
CAPTCHA bloqueando Site exibiu um desafio Configure o Contorno de Captcha: componente no agente, provedor e campo na etapa.
Variável vazia nas etapas seguintes Seletor não capturou o elemento ou a página mudou Ative Gerar Evidência? na etapa de extração e compare a tela real com o esperado.
Erro de criptografia no conector Credencial expirada ou API Key inválida Abra o conector, limpe o campo de senha e reinsira a credencial válida.
Loop infinito (Limitador de Ações atingido) Condição de saída do loop nunca é verdadeira Adicione logs na etapa de decisão para verificar a variável de controle (Loop). Confirme que ela é atualizada a cada iteração.
Runtime offline Aplicativo do runtime não está rodando na máquina Verifique o status em Meus Ambientes e reinicie o runtime na máquina de destino.
Ambiente não encontrado na conta do dono do agente O agente aponta para um ambiente que o dono não alcança. Acontece com agente compartilhado cujo ambiente foi trocado por outra pessoa Não adianta reiniciar runtime: nenhum atende esse agente. O dono precisa abrir o agente e escolher de novo o ambiente no seletor AMBIENTE. Para testar sem depender disso, use a Sandbox.
Consulta a banco devolve dezenas de milhares de linhas A consulta traz a tabela inteira em vez do recorte que o processo usa Use LIMIT (ou o equivalente do seu banco) e selecione só as colunas necessárias. Se o processo precisa mesmo percorrer tudo, quebre em blocos com Loop. O retorno completo não fica guardado para o 📌 nem para o ▶ reiniciar daqui, mas o log mostra uma amostra das primeiras linhas.