CodeGym/Blogue Java/Random-PT/Depuração no IntelliJ IDEA: um guia para iniciantes
John Squirrels
Nível 41
San Francisco

Depuração no IntelliJ IDEA: um guia para iniciantes

Publicado no grupo Random-PT
Olá a todos da comunidade CodeGym! Hoje vamos falar sobre depuração — o que é e como depurar no IntelliJ IDEA. Este artigo é destinado a pessoas que já possuem um conhecimento mínimo de Java Core. Não haverá estruturas ou procedimentos complicados para publicar bibliotecas. Um passeio tranquilo. Então fique à vontade e vamos começar! Depuração no IntelliJ IDEA: um guia para iniciantes - 1

Por que você precisa do modo de depuração

Vamos esclarecer algo imediatamente para nós mesmos: não há código sem bugs... É assim que a vida funciona. Portanto, não devemos cair em pedaços e desistir se nosso código não funcionar como esperávamos. Mas o que devemos fazer? Bem, poderíamos colocar System.out.printlninstruções em todos os lugares e depois vasculhar a saída do console na esperança de encontrar um erro. Dito isso, você pode (e as pessoas o fazem) depurar usando um log cuidadoso. Mas se você puder executar seu código em uma máquina local, é melhor usar o modo de depuração . Quero observar imediatamente que neste artigo consideraremos a depuração de um projeto usando o IntelliJ IDEA.

O que é o modo de depuração?

O modo de depuração é para depurar (verificar) o código em execução. Isso permite que você interrompa a execução em locais designados e veja como as coisas estão progredindo. Ele permite que você entenda o estado do programa em um determinado local do código. É como poder parar o relógio e olhar tudo de lado. Legal certo? Nosso objetivo é aprender de forma rápida e fácil como depurar aplicativos usando nosso amado ambiente de desenvolvimento IntelliJ IDEA.

O que você precisa para iniciar a depuração

Aqui estão alguns conselhos gratuitos: enquanto lê este artigo, faça tudo o que será descrito aqui - você tem tudo o que precisa fazer para acompanhar. O que você precisa:
  1. IntelliJ IDEA versão 2019.3.1 ou superior. Caso alguém não o tenha, aqui está um link onde você pode baixá-lo . Baixe o Community Edition — essa é a versão que usarei.
  2. Clone este projeto do GitHub e importe-o por meio do IDEA.
Abrir IDEA: Depuração no IntelliJ IDEA: um guia para iniciantes - 2Selecione o projeto de apresentação de depuração e pressione OK . Então você verá a seguinte janela: Depuração no IntelliJ IDEA: um guia para iniciantes - 3Deixe as opções selecionadas: Importar projeto de fontes externas e Maven . Clique em Concluir . Agora que importamos o projeto, podemos descrever o restante do processo com um exemplo vivo.

Só um pouco de teoria... prometo :D

Para começar a depurar um pouco, você precisa entender o que é um ponto de interrupção e estar familiarizado com algumas teclas de atalho. Um ponto de interrupção é um marcador especial que indica onde você deseja que a execução do aplicativo pare, possivelmente com base no estado do aplicativo. Você pode definir um ponto de interrupção clicando com o botão esquerdo no painel esquerdo ou clicando no local do código e pressionando Ctrl+F8 . Vejamos três tipos de pontos de interrupção: pontos de interrupção de linha, pontos de controle de campo e pontos de interrupção de método. Isto é o que parece:
  • Em uma linha:

    Depurando no IntelliJ IDEA: um guia para iniciantes - 4

    Se uma instrução tiver uma expressão lambda, o IDEA solicitará que você escolha se deseja colocar o ponto de interrupção na instrução inteira ou especificamente na expressão lambda:

    Depurando no IntelliJ IDEA: um guia para iniciantes - 5
  • Em um método:

    Depurando no IntelliJ IDEA: um guia para iniciantes - 6
  • Em uma aula:

    Depuração no IntelliJ IDEA: um guia para iniciantes - 7
Os pontos de interrupção podem ser removidos seguindo as mesmas etapas usadas para adicioná-los. Há situações em que você deseja desativá-los (silenciá-los). Para fazer isso, encontre o Depurando no IntelliJ IDEA: um guia para iniciantes - 8ícone na seção Depurar. Isso silenciará todos os pontos de interrupção. Para ver quais pontos de interrupção foram definidos, você pode ir para a seção Depurar no canto inferior esquerdo e encontrar o Depurando no IntelliJ IDEA: um guia para iniciantes - 9ícone ou pressionar Ctrl+Shift+F8 : Depuração no IntelliJ IDEA: um guia para iniciantes - 10Movendo-se para a lista de pontos de interrupção, veremos o seguinte: Depuração no IntelliJ IDEA: um guia para iniciantes - 11Existem dois pontos de interrupção aqui:
  • Bee.java:24 — na classe Bee na linha 24
  • Main.java:14 — na classe Main na linha 14
Observe que esses pontos de interrupção não serão definidos automaticamente se você tiver clonado o projeto: você mesmo precisará defini-los! Há também uma seção Java Exception Breakpoints . É muito útil. Aqui você pode adicionar um ponto de interrupção implícito para que o programa pare antes de lançar qualquer exceção ou uma exceção específica. Adicionaremos um ponto de interrupção implícito para RuntimeException. Isso é fácil de fazer. Encontre o ícone "+" no canto superior esquerdo. Clique nele e selecione Java Exception Breakpoints : Depurando no IntelliJ IDEA: um guia para iniciantes - 12Na janela que aparece, escreva o nome da exceção que você deseja adicionar, selecione na lista e clique em OK : Depurando no IntelliJ IDEA: um guia para iniciantes - 13Isso conclui nossa cartilha sobre como configurar as coisas, agora vamos Vou seguir em alguma prática.

Vamos fazer essa coisa chamada depuração!

Venho de uma longa linhagem de apicultores familiares, então o projeto que criei para ilustrar a depuração descreve modelos do processo de coleta de néctar pelas abelhas, processamento de néctar em mel e, em seguida, obtenção de mel da colmeia. De acordo com o arquivo README da documentação , que pode ser encontrado no diretório raiz do projeto, o comportamento esperado de todas as flores das quais o néctar é coletado é que a quantidade de mel coletado (que assume a forma de um double ) seja igual à metade do o néctar recolhido. O projeto possui as seguintes classes:
  • Abelha — uma abelha operária comum
  • BeeQueen - a abelha rainha
  • BeeHive - a colméia
  • HoneyPlant - uma planta de mel (fonte de néctar) da qual o néctar é coletado
  • Main — é aqui que encontramos public static void main(), o método onde a execução começa.
Se executarmos o main()método, descobriremos que nosso programa não apenas não calcula a quantidade de mel, mas também gera uma exceção... Depurando no IntelliJ IDEA: um guia para iniciantes - 14Precisamos investigar e determinar qual é o problema. Na pilha de rastreamento no canto inferior direito, podemos ver que em um RuntimeException foi lançado em HoneyPlant.java:20: Depurando no IntelliJ IDEA: um guia para iniciantes - 15É exatamente disso que estávamos falando acima. Vamos observar essa RuntimeException executando o main()método no modo de depuração. Para fazer isso, clique na seta do triângulo verde no IntelliJ IDEA ao lado do main()método. Depurando no IntelliJ IDEA: um guia para iniciantes - 16Como resultado, teremos o programa parado no momento antes da exceção ser lançada e veremos este ícone: Depurando no IntelliJ IDEA: um guia para iniciantes - 17Depurando no IntelliJ IDEA: um guia para iniciantes - 18Para obter todas as informações disponíveis, precisamos procurar na seção Debug. Tem uma variávelpainel que mostra todas as variáveis ​​disponíveis nesta parte do aplicativo:
  • néctar = 1,0;
  • nectarCapacity = -1,0.
Lançar a exceção faz sentido, porque uma planta de mel não pode ter uma quantidade negativa de néctar. Mas por que isso está acontecendo? Afinal, nas linhas 15-17, verificamos se o suprimento de néctar está esgotado e retornamos zero se estiver:
if (nectar == 0) {
   	     return 0;
}
Mas o problema é que estamos verificando a variável errada. Isso é um erro no código. Ao invés de verificar a quantidade de néctar disponível na flor (que está armazenada na variável nectarCapacity ), o programa verifica o valor do parâmetro nectar do método , que é a quantidade de néctar que queremos retirar da flor. Aqui está! Nosso primeiro erro! Depois de corrigir isso, obtemos o seguinte código:
if (nectarCapacity == 0) {
   	     return 0;
}
Agora execute o main()método normalmente (Run 'Main.main()'). Nenhuma exceção é lançada e o programa funciona: Depurando no IntelliJ IDEA: um guia para iniciantes - 19O aplicativo é executado até a conclusão e fornece a seguinte resposta:
"33.0 honey was produced by 7 bees from 2 honey plants"
Tudo estaria bem agora, mas esta resposta está incorreta... De acordo com o arquivo README da documentação , o néctar é convertido em mel na proporção de 2 para 1:
## Documentation
Presentation based on honey production.

**Note**: 2 units of nectar = 1 unit of honey
O método principal tem claramente duas plantas de mel com 30 e 40 unidades de néctar, respectivamente. Portanto, devemos acabar com 35 unidades de mel. Mas o programa está nos dizendo que temos 33. Para onde foram as outras duas unidades? Vamos descobrir! Para isso, defina um breakpoint no Main.main()método na linha 28, onde beeHive.populateHoney()é chamado e execute o main()método em modo Debug: Depurando no IntelliJ IDEA: um guia para iniciantes - 20Consideraremos este ponto com mais detalhes. O programa parou de executar antes de executar a linha 28. Na parte inferior, vemos a seção Debug, que mostra todas as informações disponíveis sobre o aplicativo em execução. Como já mencionado, o painel Variáveis ​​contém todas as variáveis ​​e objetos disponíveis nesta parte do aplicativo. O painel Quadros mostra as etapas pelas quais o aplicativo está passando — você pode examinar as etapas anteriores (quadros) e ver todos os dados locais. Para continuar executando o programa, você pode pressionar F9 ou o ícone verde, conforme mostrado abaixo: Depurando no IntelliJ IDEA: um guia para iniciantes - 21Para parar o programa, clique no quadrado vermelho: Depurando no IntelliJ IDEA: um guia para iniciantes - 22Para reiniciar o aplicativo no modo de depuração, clique na seta Depurando no IntelliJ IDEA: um guia para iniciantes - 23: aplicação passo a passo usando duas teclas:
  • F8 — Percorra o código sem entrar nos métodos;
  • F7 — Percorra o código e entre nos métodos.
No nosso caso, precisamos pressionar F7, para entrar no beeHive.populateHoney()método. Entrando nele, obtemos: Depurando no IntelliJ IDEA: um guia para iniciantes - 24Agora usaremos F8 para percorrer este método e descrever o que acontece nele:
  • Linha 25 — A API Stream é usada para coletar néctar de todas as abelhas
  • Linha 26 — O mel recém-criado é adicionado ao mel existente;
  • Linha 27 — 2 unidades de mel são alocadas para a rainha
  • Linha 28 — Essas duas unidades são retiradas da quantidade total de mel
  • Linha 29 — A rainha come este mel.
Então foi para lá que foram as duas unidades desaparecidas! Viva! Depois de conversar com um analista de negócios, concluímos que o arquivo README da documentação contém um erro e precisa ser atualizado. Vamos atualizar o arquivo README:
## Documentation
Presentation based on honey production.

**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
Foram realizadas. Corrigimos todos os bugs que encontramos. Podemos continuar calmamente com um olhar presunçoso, tomar um café e ler artigos no Stack Overflow CodeGym :)

vamos resumir

Neste artigo, aprendemos:
  • o trabalho de todos tem erros e a depuração é uma ótima maneira de corrigi-los
  • o que é um ponto de interrupção e quais tipos de pontos de interrupção existem
  • como definir um ponto de interrupção de exceção
  • como percorrer o código no modo de depuração

artigo para ler

Comentários
  • Populares
  • Novas
  • Antigas
Você precisa acessar para deixar um comentário
Esta página ainda não tem nenhum comentário