Como debugar seu projeto Spring Boot usando o IntelliJ IDEA Community Edition

Como debugar/depurar seu projeto Spring Boot usando o IntelliJ IDEA Community Edition.

Como debugar seu projeto Spring Boot usando o IntelliJ IDEA Community Edition

Você marcou o breakpoint no seu código, iniciou uma sessão de debug mas a execução não paralisou onde você marcou. É algo chato, irritante, que sempre ocorre comigo, porém fácil de resolver. Bora lá?

Ingredientes

  • Intellij Idea Community Edition (em breve vai ser unificado ao Ultimate) versão 2025.2.1
  • Sua aplicação usando Spring Boot 2.x ou 3.x
  • Maven - por que é o que costumamos usar na itexto
  • JDK - qualquer versão a partir do 8

Pra começar: você sabe como debugar (depurar) algo com Intellij IDEA?

É razoavelmente simples: envolve dois passos apenas. O primeiro é marcar o ponto no seu código em que você quer que a execução seja paralisada (é o breakpoint). Faça isto clicando no número da linha em seu editor, tal como no print abaixo:

Há dois pontos para iniciar a depuração. O primeiro está na aba Maven do IntelliJ. No grupo "Plugins/spring-boot" você vai buscar a opção "spring-boot:run". Clica com o botão direito do mouse sobre esta opção e depois sobre a alternativa "Debug...", tal como no print abaixo:

Após esta primeira execução vai aparecer nas opções de execução que fica no topo direito da IDE a opção pra depurar. É o ícone de "bichinho" que mostro no print abaixo:

Lindo né? Mega fácil: só que não. Apenas isto não irá parar a execução no seu breakpoint quando o código for executado.

Como resolver o problema

A causa raiz do problema é que a aplicação é executada em uma JVM diferente da do Maven: é o que se chama de "fork". Então segue uma solução que vale pra qualquer versão do Spring Boot.

Aqui está o textinho mágico que é a razão principal pela qual estou escrevendo esta receita (eu sempre esqueço):

-Dspring-boot.run.jvmArguments=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

Primeiro passo: modifique sua run configuration

Você irá modificar a "run configuration" do Maven. Há dois caminhos pra isto: o primeiro é na aba Maven do IntelliJ: clique com o botão direito sobre "spring-boot:run" e escolha a opção "Modify run configuration", tal como no print a seguir:

Ou no menu de execução, tal como no print a seguir:

Adicione o "texto mágico" que citei acima na caixa de texto "Run" da janela "Run/Debug Configurations", tal como no print:

Veja aqui a minha configuração de exemplo:

spring-boot:run -Dspring-boot.run.jvmArguments=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -f pom.xml

Atenção: o parâmetro "-f" deve sempre vir por último

Clique no botão "Ok" ou "Apply".

Segundo passo: depurando com alegria

Usando a run configuration que você alterou, inicie seu projeto. Não se esqueça de marcar seus breakpoints aonde você quer depurar o código.

O breakpoint da paixão

No menu "Run" do IntelliJ, clique sobre a opção "Attach to Process", tal como no print a seguir:

Irá surgir uma janela:

Selecione o processo (pode ser meio confuso com execuções passadas). Execute o código que vai parar no seu breakpoint e...

Breakpoint da paixão feliz por ter paralisado seu código!

A depuração está funcionando agora!

Atenção para a barra de ferramentas de execução: note que agora há dois processos que você pode parar, tal como exposto no print a seguir:

Aí você pode parar tanto o processo principal ("o do spring-boot:run") quanto o do depurador: "localhost:5005". Como funciona isto?

Passo 3 - entendendo a solução

Nós apenas habilitamos o agente de depuração da JVM o configurando para ouvir na porta 5005. Com isto, a sua aplicação está disponível para que qualquer outro processo Java de depuração possa se conectar e inspecionar seu ambiente de execução, paralisar execução, etc.

É possível inclusive depurar código remotamente assim. Recomendo? Não, só se você tiver pleno controle sobre o ambiente e a segurança do mesmo.

Concluindo e mostrando alternativas

Esta não é a única solução para o problema: a causa raiz é o fork mode que inicia a aplicação em um processo diferente do Maven.

Você também pode desabilitar o fork mode modificando seu arquivo pom.xml ou passando parâmetros para o Maven, tal como exposto neste link. O problema é que nem sempre funciona: pode variar de acordo com a versão do Spring Boot, Maven, IntelliJ.

Até a próxima!

Este é um excelente exemplo do que chamamos de "Receita": a solução de um problema que ocorre o tempo inteiro e que você precisa ter a solução salva em algum lugar. Recomendamos MUITO que você crie seu próprio livro de receitas. Quer conhecer esta nossa técnica? Leia o texto abaixo!

O livro de receitas da itexto
Escrever software é difícil: mantê-lo ainda mais. Neste post apresento uma técnica que nossa equipe aplica internamente, recomendamos a nossos clientes e que abrimos agora ao resto do mundo: o livro de receitas. A ideia parece simples, é simples (quase óbvia) porém poucas equipes a aplicam. Neste post vamos conversar

Mantido por itexto Consultoria