Olá a todos, comunidade JavaRush. Hoje falaremos sobre depuração: o que é e como depurar no Intellij IDEA. O artigo é destinado a pessoas que já possuem conhecimento mínimo de Java Core. Não haverá estruturas ou processos complexos para publicação de bibliotecas. Caminhada fácil. Então fique à vontade e vamos começar!
na documentação do arquivo README, que está na raiz do projeto, lemos: comportamento esperado - de todas as flores das quais o néctar é coletado (em valor duplo ), será coletada uma quantidade de mel igual à metade de o néctar coletado. O projeto possui as seguintes classes:
da documentação Está escrito que o néctar se transforma em mel na proporção de 2 para 1:
o arquivo README da documentação contém um erro e precisará ser atualizado. Vamos atualizar o arquivo README:
hub JavaRush com um visual inteligente :)
Por que você precisa de depuração?
Vamos deixar claro desde já: não existe código sem bugs... É assim que a vida funciona. Portanto, não devemos ficar moles imediatamente e desistir de tudo se o código não funcionar como esperávamos. Mas o que fazer? Claro, você pode instruirSystem.out.println
sempre que possível e então vasculhar a saída no terminal na esperança de encontrar um erro. Ainda assim, é possível... e eles fazem isso, e fazem isso com cuidado usando logging (você pode ler sobre isso aqui ). Mas se for possível executar o código na máquina local, é melhor usar o Debug . Gostaria de observar imediatamente que neste artigo consideraremos a depuração de um projeto dentro do Intellij IDEA. Se você estiver interessado em ler sobre depuração remota, aqui está um artigo do nosso recurso .
O que é depuração
Depurar é o processo de depuração (verificação) do código, quando durante sua execução você pode parar em um local designado e observar o andamento da execução. Entenda o estado do programa em um determinado local. É exatamente como se você pudesse parar a vida e olhar tudo de fora. Legal certo? Nosso objetivo é aprender de forma rápida e fácil como depurar aplicativos usando nosso ambiente de desenvolvimento favorito, o Intellij IDEA.O que você precisa para começar a depurar
Dou um conselho grátis: enquanto você lê o artigo, faça tudo o que será descrito aqui, felizmente há de tudo para isso. O que você precisa:- Ambiente de desenvolvimento Intellij IDEA versão 2019.3.1 e superior. Caso alguém não tenha, aqui está um link onde você pode baixá-lo. Baixe a Community Edition porque é ela que irei usar.
- Clone o projeto do GitHub e importe-o via IDEA.
Um pouco de teoria... eu prometo :D
Para iniciar a depuração no mínimo grau, você precisa entender o que é breakPoint e algumas teclas de atalho necessárias para começar. BreakPoint é um marcador especial que exibe o local ou estado em que o aplicativo deve ser interrompido. Você pode definir um ponto de interrupção clicando com o botão esquerdo na barra lateral esquerda ou clicando no local do código e pressionando Ctrl + F8 . Os pontos de interrupção vêm em três tipos: um rótulo por linha, um rótulo por variável e um rótulo por método. Se parece com isso:-
Por linha:
se houver um lambda na expressão, o IDEA oferece uma escolha - colocar a expressão em toda a linha ou especificamente no lambda:
-
Por método:
-
Por aula
- Bee.java:24 - na classe Bee na linha 24
- Main.java:14 – na classe Main na linha 14
Vamos lá, vamos entrar na selva da depuração
Como sou apicultor hereditário, para a apresentação de depuração criei um projeto que descreve o processo de coleta de néctar pelas abelhas, processamento do néctar em mel e obtenção de mel da colmeia. Com base- Abelha - uma abelha operária comum;
- BeeQueen - abelha rainha;
- BeeHive - colmeia;
- HoneyPlant - planta de mel da qual o mel é coletado;
- Principal - onde
public static void main()
está localizado o método em que o projeto é iniciado.
main()
, acontece que não só a quantidade de mel não é contada, mas também aparece um erro... Você precisa ver o que há de errado aí. A partir do rastreamento de pilha no canto inferior direito, podemos ver que em HoneyPlant.java:20
, uma RuntimeException é lançada: Este é exatamente o nosso caso: existe uma RuntimeException, vamos adicionar uma busca por tal exceção, conforme descrito acima, e executar main()
o método em modo de depuração. Para fazer isso, clique na seta do triângulo verde no Intellij IDEA antes do método main()
: e obteremos o programa interrompido no momento antes da exceção com este ícone ser acionada . Para obter informações completas, você precisa procurar na seção Debug. Possui Variables , que mostra todas as variáveis disponíveis nesta parte da aplicação:
- néctar = 1,0;
- néctarCapacidade = -1,0.
if ( nectar == 0 ) {
return 0;
}
Mas o problema é que ele está verificando a variável errada... e isso é um bug no código. Ao invés de verificar o valor do néctar na flor, que está na variável nectarCapacity , o programa verifica o valor do néctar , que entra no método e é a quantidade que eles querem tirar do néctar. Aqui está, o primeiro bug! Portanto, colocamos corretamente e obtemos a expressão:
if ( nectarCapacity == 0) {
return 0;
}
A seguir executamos main()
o método no modo normal (Run `Main.main()`)
e não há mais erro, o programa funcionou: O aplicativo funcionou e deu a resposta: “33,0 mel foi produzido por 7 abelhas de 2 plantas melíferas” Tudo ficaria bem, mas a resposta é errado... Tudo porque no arquivo README ## Documentation
Presentation based on honey getting process.
**Note**: 1 honey point = 2 nectar points
Pelo método principal percebe-se que são duas plantas de mel, 30 e 40 unidades de néctar respectivamente, então no final você deverá obter 35 unidades de mel. E ele escreve esse 33. Para onde foram as outras duas unidades?... Agora vamos descobrir! Para fazer isso, precisamos colocar um ponto de interrupção no método Main.main()
na linha nº 28, onde ele é executado beeHive.populateHoney()
e executar main
o método no modo Debug: Vamos dar uma olhada neste ponto. O programa parou antes de executar a 28ª linha. Na parte inferior vemos a seção Debug, que descreve todas as informações sobre o aplicativo em execução. A parte Variáveis, como já mencionado, contém todas as variáveis e objetos que são acessíveis nesta parte da aplicação. A parte Frames mostra as etapas pelas quais a aplicação passa, você pode olhar a etapa anterior e obter todos os dados locais. Para que o programa continue funcionando, você pode pressionar F9 ou o ícone verde, conforme mostrado abaixo: Para parar o programa, você precisa clicar no quadrado vermelho: Para reiniciar o aplicativo em modo de depuração, você precisa clicar na seta: A seguir, para percorrer passo a passo o aplicativo, você pode usar duas teclas:
- F8 - percorra uma seção do código e não entre em métodos internos;
- F7 - passe por uma seção do código e insira métodos internos.
beeHive.populateHoney()
, precisamos pressionar F7, e seguiremos em frente: A seguir, passamos pelo modo de depuração usando F8 usando este método até o final e descrevemos o que acontece neste método:
- Linha 25 – Stream API é usada para coletar mel de todas as abelhas;
- 26ª linha - o mel é adicionado ao existente;
- 27ª linha - são alocadas 2 unidades de mel para a rainha;
- 28ª linha - essas duas unidades são retiradas da quantidade total de mel;
- Linha 29 - o útero come esse mel.
## Documentation
Presentation based on honey getting process.
**Note**:
* 1 honey point = 2 nectar points
* 2 honey point queen bee eats every time when beehive populates the honey.
E é isso: todos os bugs encontrados foram corrigidos, podemos continuar tomando café com calma e lendo artigos no Resumir
Neste artigo descobrimos que:- não há trabalho sem erros e a depuração é uma ótima maneira de resolvê-los;
- o que é um ponto de interrupção e que tipos ele existe;
- como configurar o ponto de interrupção de exceção;
- Como navegar no modo de depuração.
Artigo para ler
- O projeto usado no artigo
- IntelliJ IDEA e Debug: não mergulho, mas mergulho com snorkel
- A amarga verdade sobre programação...
- Documentação oficial
- Tipos de pontos de interrupção. Documentação oficial
- Como um teste de entrevista se transformou em uma biblioteca de código aberto
- Criando um sistema de monitoramento de preços de passagens aéreas: um guia passo a passo [Parte 1]
- Guia para criar um cliente para a API Skyscanner e publicá-lo no jCenter e Maven Central [Parte 1]
- Exploração madeireira: o quê, como, onde e com quê?
GO TO FULL VERSION