Replay debugger no VSCode – O sonho de todo DEV Salesforce

Tenho certeza que o sonho de todo DEV Salesforce era poder debugar seu código, e isso se tornou possível com o Replay debugger do Salesforce CLI no VSCode, então bora lá entender como funciona essa mágica, e tornar esse sonho realidade?

Se você já matou o seu Eclipse, e migrou para o Visual Studio Code, o VSCode, hoje vou te mostrar como debugar o seu código usando o Replay debugger, mas antes vamos entender como essa mágica funciona.

Como funciona o Replay debugger

O Replay debugger, como o próximo nome diz é um Replay, ou seja você vai debugar o seu código com o que já aconteceu, diferentemente do que é permitido em outras linguagens de programação como JavaScript, C# entre outras, em que você consegue debugar o seu código no momento de sua execução, e isso se dá por conta de estarmos falando de uma tecnologia em nuvem, afinal o código não esta rodando no seu computador, e sim nos servidores da Salesforce, e o Replay vem dá onde então, você deve esta se perguntando, bom, o que o Salesforce fez foi, baseado no log de depuração do usuário, remontar o cenário do seu código permitindo que todas as variáveis do seu código sejam realimentada, e você consiga ver o que aconteceu, passando linha a linha, se você já debugou algum código na sua vida, sei que tudo que eu disse fez sentido, se você nunca teve essa experiencia, fique tranquilo porque vamos juntos passo a passo, fazer o debug de um código, para você de fato entender o que eu estou falando, acredito que nesse ponto, não preciso falar que você já precisa estar com o VSCode instalado e funcionando, e com o seu projeto importado né? Se não sabe o que eu estou falando, leia esse post e depois volte para cá.

O que pode ser debugado com o Replay debugger

Controller, Batch, Trigger, Classes, ou seja basicamente tudo que gera um arquivo de log no Salesforce e passe pelo seu código, mas para isso o seu log de depuração precisa ter duas coisas importantes configuradas, você precisa que o seu log esteja configurado para Apex code como FINEST level e Visualforce com FINER level, e isso não é opcional, se você tentar depurar o seu código com um log que não tenha tais informações, você receberá a seguinte mensagem de erro.

The log must be generated with log categories Apex code at the FINEST level and Visualforce at the FINER level.

Ativando o Replay debugger no VSCode

será possível você debugar o código de um usuário de produção mesmo que você não tenha acesso ao ambiente

Existe duas formas e fazer isso, a fácil e a trabalhosa, você escolhe, vamos começar pela mais trabalhosa, mas, ainda assim útil se você precisar debugar um código que outro usuário senão você for executar, e aqui também pode ser um diferencial e tanto desse recurso de Replay, uma vez que o código esteja igual ao de outro ambiente, será possível você debugar o código de um usuário de produção mesmo que você não tenha acesso ao ambiente, mas claro que para isso você deve garantir que o seu código esta igual ao ambiente que você obteve o log e também que o log esteja devidamente configurado, como eu citei lá em cima.

Na org que deseja obter o log de depuração, clique na engrenagem, e em seguida em Setup.

No menu, procure por Debug Logs.

Em seguida clique no botão [New]

Se você alguma vez precisou ativar um Log de depuração, sei que deve estar sendo muito mais do mesmo até aqui né, mas calma porque é agora que vem o pulo do gato, nessa nova tela preencha o usuário que deseja debugar, set o intervalo de tempo desejado (O máximo é 24 horas), e por fim, clique no botão [New Debug Level].

Esse processo você só precisará fazer uma vez, pois uma vez que você tenha configurado o seu Debug Level adequadamente, para debugar outro usuário, basta selecionar na lupa o debug level que você criar aqui nessa etapa. Então nesse popup que abriu, preencha o nome do seu novo Debug Level, no meu caso eu utilizei VSCodeDebug, e altere as configurações do Level da categoria Apex Code para FinestVisualforce para Finer, em seguida clique no botão [Save], ao clicar em Save, você deve voltar para a tela de ativação do debug do usuário, então clica novamente no botão [Save] dessa tela que agora já deve estar com o Debug level preenchido.

Bom, esse foi o modo trabalhoso, mas que você deve saber fazer, caso precise depurar o código com outro usuário que não o seu.

Agora vamos para o modo fácil, abra o projeto que deseja depurar no VSCode, em seguida acesse o menu View \ Command Palette (Command + Shift + P no macOs), e digite: >SFDX: Turn On Apex Debug Log for Replay Debugger, aguarde até que o popup de progresso indique o termino e ualá, toda a configuração que fizemos no processo acima, foi feito pelo CLI do Salesforce para você.

Abaixo o User Trace Flags ativado pelo CLI do Salesforce.

Lembrando que caso não queira mais debugar, você pode também desligar a captura do log de depuração, para isso no VSCode, acesse o menu View \ Command Palette (Command + Shift + P no macOs), e digite: >SFDX: Turn Off Apex Debug Log for Replay Debugger, isso fará com que o User Trace Flags criado para o seu usuário seja deletado.

Depurando o seu código com o Replay debugger

Estamos quase lá, toda a configuração necessária foi realizada, seja no modo fácil ou trabalhoso, certo? Então agora o próximo passo é encontrar o trecho de código que deseja depurar, e colocar os Breakpoints, que são os marcadores que irá indicar onde você deseja que a execução do código pare para você analisar o que esta acontecendo, tente chegar o mais perto do problema, se você já olhou o log de depuração onde você recebeu o erro, você já vai saber qual é a classe e qual é o método com problema, então você já vai ter o seu ponto de partida, para exemplificar o nosso caso de depuração eu criei uma classe que receberá dois parâmetros de entrada e realizará a soma, e vou chamar esse método pelo Console do Desenvolvedor (Brincadeira chamei ele pelo próprio VSCode, mas como fazer isso vai ficar para um próximo post), então a minha classe ficou assim:

Você notou que na linha 5, tem um circulo vermelho antes do número, pois bem, esse é o nosso Breakpoint, ou seja uma vez que o Log de Depuração esteja ativo, você tenha um breakpoint marcado na sua classe, o próximo passo e executar o seu método para que seja gerado o log de depuração para esse seu código, e assim você possa depurar ele, então vou executar o seguinte trecho de código:

new Matematica.SomaValores(6, 5);

Note que não precisei colocar System.Debug() em nenhum ponto do meu código executado nem da minha classe, toda a mágica irá acontecer sem isso, e de uma forma muito mais dinâmica.

Uma vez que você tem a certeza de que o seu trecho de código foi executado, acesse o menu View \ Command Palette (Command + Shift + P no macOs), e digite: >SFDX: Get Apex Debug Logs… este comando te exibira uma lista de logs que foram gerados depois da ativação do registro de depuração, então escolha o seu log clicando nele e indique a pasta onde você deseja gravar o log, recomendo que você crie uma pasta chamada log dentro do seu projeto.

Em posse do seu Log, e com o seu breakpoint a postos, agora chegou a hora da verdadeira mágica acontecer. acesse o menu View \ Command Palette (Command + Shift + P no macOs), e digite: >SFDX: Launch Apex Replay Debugger with Last Log File e indique o arquivo de log que você baixou no passo anterior.

Você irá notar algumas alterações no visual do seu VSCode, uma barra de navegação sugira ao topo, essa barra que permitira que você navegue entre os breakpoints do seu código, depois que você decorar as teclas de atalho, tudo ficará mais fácil ainda.

E na sua barra lateral esquerda, você será direcionado ao modo de depuração do VSCode, para iniciar a sua depuração, clique no ícone de Play.

Agora me fala se isso não foi mágico? E ainda nem é tudo, conforme você for debugando o seu código, você verá a evolução das variáveis no menu da esquerda.

Para finalizar, vamos entender o que cada um dos botões de navegação faz.

  • Play, Continue (F5), avança para o próximo breakpoint, caso não tenha um próximo, a execução será finalizada, mas você poderá repetir quantas vezes desejar.
  • Seta curvada, Step Over (F10), avança para a próxima linha de código, se a próxima linha for um uma chamada de método, ela não irá entrar dentro desse método.
  • Seta para baixo, Step Into (F11), avança para a próxima linha, porém se a próxima linha for a execução de um método, ele irá para a primeira linha dentro desse método.
  • Seta para cima, Step Out (Shift  + F11), avança para a próxima linha, saindo do método corrente.
  • Seta em circulo verde, Restart (Shift + Command + F5), reinicia novamente o processo de depuração, desde o começo.
  • Quadrado vermelho, Stop (Shift + F5), para a execução Replay debugger.

 

Agora é só colocar em prática, que eu tenho certeza que a sua vida irá mudar daqui para frente, depurar códigos linha a linha sem ter que ficar enchendo o seu código de System.Debug() vai ser muito mais divertido e prático. E se isso não te fizer matar o Eclipse, Developer Console ou IntelliJ então nada mais fará.

Se você acredita que isso será útil para você (e eu duvido que não seja), quero te pedir um favor, alias dois, o primeiro é compartilhar isso com seu amigo DEV, tenho certeza que ele irá te agradecer, e segundo me conte aqui a baixo nos comentários o que você achou dessa feature e se realmente é útil para você.

 

Um forte abraço Trailblazers, e até o próximo post :)

 

Fernando Sousa

Senior Salesforce Developer

Bacharel em Sistemas da Informação pela Universidade de Taubaté (UNITAU) e MBA em Projeto de Aplicações para Dispositivos Móveis pelo IGTI – Instituto de Gestão em Tecnologia da Informação. 

Comecei a programar bem cedo, por volta de 10 anos de idade, de maneira auto-didata passei por várias linguagens.

Em 2015 me conectei a plataforma Salesforce pela primeira vez, para fazer una integração entre um Aplicativos Mobile em android e o Salesforce Platform. 

Atualmente com as certificações Salesforce Certified Platform Developer I, Salesforce Certified Platform App BuilderSalesforce Certified Platform Developer IISalesforce Administrator e Sharing and Visibility.

Acompanhe meu Trailhead aqui.

 

 

ApexBugDebugDepuraçãoDepurarReplay debuggerSalesforceSalesforceDeveloperSalesforceDevelopmentVSCode