Download - Depuração de software
![Page 1: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/1.jpg)
Depuração de códigoProf. Leonardo Soares e Silva
![Page 2: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/2.jpg)
public double somarIdades(){
Pessoa leonardo = Database.getPessoaFromDb(78);
Pessoa joaquim = null;
Double idade = leonardo.getIdade() + joaquim.getIdade();
return idade;
}
1) Qual erro pode ocorrer?
R - NullPointerException
Problema
![Page 3: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/3.jpg)
public double somarIdades(){Pessoa leonardo = Database.getPessoaFromDb(78);Pessoa joaquim = Database.getPessoaFromDb(79);Double idade = leonardo.getIdade() + joaquim.getIdade();return idade;
}
public Pessoa getPessoaFromDb( int chavePrimaria ){Session session = Hibernate.getSession();if( session == null)
return null;Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);return p;
}
Problema
![Page 4: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/4.jpg)
public ControleCurso() {
curso = new Curso();
selecionado = null;
dao = new CursoDao();
List<Aluno> listaAlunos = new ArrayList<Aluno>();
try {
for (int i = 0; i < alunoDao.recuperarTodos().size(); i++) {
Aluno obj = alunoDao.recuperarTodos().get(i);
if (obj.getAtivo() == 1) {
listaAlunos.add(obj);
}
}
} catch (Exception e) {
FacesContext ctx = FacesContext.getCurrentInstance();
ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao obter a lista de Cursos.", ""));
}
alunosAtivos = new ArrayList<Aluno>(listaAlunos);
List<Servidor> listaServidores = new ArrayList<Servidor>();
try {
for (int i = 0; i < servidorDao.recuperarTodos().size(); i++) {
Servidor obj = servidorDao.recuperarTodos().get(i);
if (obj.getAtivo() == 1) {
listaServidores.add(obj);
}
}
} catch (Exception e) {
FacesContext ctx = FacesContext.getCurrentInstance();
ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao obter a lista de Servidores.", ""));
Problema
![Page 5: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/5.jpg)
Sabemos onde estão nossos erros, pois o Java nos avisa
Estes avisos, para quem tem pouca experiência, podem serdifíceis de interpretar
Além disto não sabemos exatamente o que levou eles a ocorrerem
Problemas
![Page 6: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/6.jpg)
Sabendo os valores das variáveis no momento de execução
Saber o comportamento de nosso código
Entendendo o que está acontecendo
Como resolver
![Page 7: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/7.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
I - Simulação de execução de um código
![Page 8: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/8.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
I - Simulação de execução de um código
Session = null
![Page 9: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/9.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
I - Simulação de execução de um código
![Page 10: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/10.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
II - Simulação de execução de um código
![Page 11: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/11.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
I - Simulação de execução de um código
![Page 12: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/12.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
I - Simulação de execução de um código
Session != null
![Page 13: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/13.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
I - Simulação de execução de um código
![Page 14: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/14.jpg)
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
I - Simulação de execução de um código
P = Objeto Pessoa
![Page 15: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/15.jpg)
Depuração de código
![Page 16: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/16.jpg)
Depuração de código
![Page 17: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/17.jpg)
Executar o software
Identificar onde está o
erro
Marcar o trecho do
código que queremos “assistir”
Ir passo a passo
durante a execução do
código
Localizar o problema
Corrigir o problema
Como funciona a depuração
![Page 18: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/18.jpg)
Ponto de parada (break point)
Passar dentro (Step in)
Passar fora (Step out)
Passar por fora (Step over)
Continuar (Continue)
Conceitos importantes
![Page 19: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/19.jpg)
Especifica onde queremos que a execução do nossosoftware pare
A partir deste momento iremos depurar nossaaplicação
Na maioria das IDEs é destacada com uma linhavermelha
Podemos colocar quantos quiser
Ponto de parada
![Page 20: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/20.jpg)
Depuração de código
![Page 21: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/21.jpg)
Uma vez a execução do software parada, passamos a executá-lo linha a linha
Na maioria das IDEs a linha em execução é marcadacom a cor verde
É possível entrar em métodos que são invocados
Sair deles
Passar por eles
Depuração do código
![Page 22: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/22.jpg)
Linha em execução durante a depuração
![Page 23: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/23.jpg)
Visualiza a execução de um método invocado
Step in
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
![Page 24: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/24.jpg)
Visualiza a execução de um método invocado
Step in
public Session getSession(){
…
…
}
![Page 25: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/25.jpg)
Sai do passo a passo da execução de um métodoentrado através do Step in
Step out
![Page 26: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/26.jpg)
Ignoramos o passo a passo de métodos que sãoinvocados
Step over
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
![Page 27: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/27.jpg)
Ignoramos o passo a passo de métodos que sãoinvocados
Step over
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
![Page 28: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/28.jpg)
Retorna a execução contínua do software
Continue
![Page 29: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/29.jpg)
Exemplo de depuração
![Page 30: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/30.jpg)
Implementem os códigos e verifiquem o que ocorre
Exercício
![Page 31: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/31.jpg)
public class Pessoa {String cpf;// gets e setters
}
public static void comparar(){Pessoa leonardo = new Pessoa(“12345”);Pessoa leo = new Pessoa(“12345”);
if( leonardo == leo ){System.out.println("Iguais");
}System.out.println(”Diferentes");
}
Exercício 01
![Page 32: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/32.jpg)
public static void main(String[] args) {
String nomes[] = new String[3];
nomes[1] = "disciplina";
nomes[2] = "teste";
nomes[3] = "software";
}
Exercício 02
![Page 33: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/33.jpg)
A utilizamos apenas quando há problemas ou dúvidasno código
Passado este momento executamos nosso códigonormalmente
Considerações sobre a depuração
![Page 34: Depuração de software](https://reader033.vdocuments.pub/reader033/viewer/2022052301/559e58961a28abc0208b4734/html5/thumbnails/34.jpg)
Identifiquem como funciona a depuração no Eclipse
Explicação oral na próxima aula sobre o funcionamento e conceitos da depuração
Exercício para casa