SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Depuração de código
Prof. Leonardo Soares e Silva
Problema
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
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
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();
Problemas

Sabemos onde estão nossos erros, pois o Java nos avisa
Estes avisos, para quem tem pouca experiência, podem ser
difíceis de interpretar
Além disto não sabemos exatamente o que levou eles a
ocorrerem
Como resolver

Sabendo os valores das variáveis no momento de
execução
Saber o comportamento de nosso código
Entendendo o que está acontecendo
I - Simulação de execução de um
código
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
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p =
PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
Session = null
I - Simulação de execução de um
código
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
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
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
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p =
PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
Session != null
I - Simulação de execução de um
código
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
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p =
PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
P = Objeto Pessoa
Depuração de código
Depuração de código
Como funciona a depuração
Corrigir o
problema

Executar o
software

Identificar
onde está o
erro

Localizar o
problema

Ir passo a
passo
durante a
execução do
código

Marcar o
trecho do
código que
queremos
“assistir”
Conceitos importantes

Ponto de parada (break point)
Passar dentro (Step in)
Passar fora (Step out)
Passar por fora (Step over)
Continuar (Continue)
Ponto de parada

Especifica onde queremos que a execução do nosso
software pare
A partir deste momento iremos depurar nossa
aplicação
Na maioria das IDEs é destacada com uma linha
vermelha
Podemos colocar quantos quiser
Depuração de código
Depuração do código

Uma vez a execução do software parada, passamos a
executá-lo linha a linha
Na maioria das IDEs a linha em execução é marcada
com a cor verde
É possível entrar em métodos que são invocados
Sair deles
Passar por eles
Linha em execução durante a
depuração
Step in

Visualiza a execução de um método invocado
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p =
PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
}
Step in

Visualiza a execução de um método invocado
public Session getSession(){
…
…
}
Step out

Sai do passo a passo da execução de um método
entrado através do Step in
Step over

Ignoramos o passo a passo de métodos que são
invocados
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p =
PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
Step over

Ignoramos o passo a passo de métodos que são
invocados
public Pessoa getPessoaFromDb( int chavePrimaria ){
Session session = Hibernate.getSession();
if( session == null)
return null;
Pessoa p =
PessoaDao.loadFromPrimaryKey(chavePrimaria);
return p;
Continue

Retorna a execução contínua do software
Exemplo de depuração
Exercício

Implementem os códigos e verifiquem o que ocorre
Exercício 01
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 02
public static void main(String[] args) {
String nomes[] = new String[3];
nomes[1] = "disciplina";
nomes[2] = "teste";
nomes[3] = "software";
}
Considerações sobre a depuração

A utilizamos apenas quando há problemas ou dúvidas
no código
Passado este momento executamos nosso código
normalmente
Exercício para casa

Identifiquem como funciona a depuração no Eclipse
Explicação oral na próxima aula sobre o
funcionamento e conceitos da depuração

Weitere ähnliche Inhalte

Was ist angesagt?

Java - Introdução a Coleções e Generics
Java - Introdução a Coleções e GenericsJava - Introdução a Coleções e Generics
Java - Introdução a Coleções e Generics
Sérgio Souza Costa
 
Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...
Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...
Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...
Cezinha Anjos
 

Was ist angesagt? (20)

Design OO
Design OODesign OO
Design OO
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
 
Java - Introdução a Coleções e Generics
Java - Introdução a Coleções e GenericsJava - Introdução a Coleções e Generics
Java - Introdução a Coleções e Generics
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
Programação Estruturada 2 - Aula 01 - Código Fonte
Programação Estruturada 2 - Aula 01 - Código FonteProgramação Estruturada 2 - Aula 01 - Código Fonte
Programação Estruturada 2 - Aula 01 - Código Fonte
 
Parte1c
Parte1cParte1c
Parte1c
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Javascript
JavascriptJavascript
Javascript
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyComo melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
 
Workshop de Certificação Java - Onixlab
Workshop de Certificação Java - OnixlabWorkshop de Certificação Java - Onixlab
Workshop de Certificação Java - Onixlab
 
Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...
Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...
Javascript assíncrono - Um bate-papo sobre event loop, event queue, callbacks...
 

Ähnlich wie Depuração de software

Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
Caveiras
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
elliando dias
 
Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
Rodrigo Branas
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
Pablo Dall'Oglio
 

Ähnlich wie Depuração de software (20)

Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
 
Spring Capitulo 03
Spring Capitulo 03Spring Capitulo 03
Spring Capitulo 03
 
Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
 
Java 07 Entrada Dados
Java 07 Entrada DadosJava 07 Entrada Dados
Java 07 Entrada Dados
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
 
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsTDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
 
Privilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisPrivilégios de processos no OpenSolaris
Privilégios de processos no OpenSolaris
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 

Mehr von Leonardo Soares

Mehr von Leonardo Soares (20)

Introdução a linguagem de programação Lua
Introdução a linguagem de programação LuaIntrodução a linguagem de programação Lua
Introdução a linguagem de programação Lua
 
Introdução ao HTML4 e HTML5
Introdução ao HTML4 e HTML5Introdução ao HTML4 e HTML5
Introdução ao HTML4 e HTML5
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnit
 
Grupo de processos de planejamento - Parte 02
Grupo de processos de planejamento - Parte 02Grupo de processos de planejamento - Parte 02
Grupo de processos de planejamento - Parte 02
 
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha TouchIntrodução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
 
Técnicas de modelagem de testes
Técnicas de modelagem de testesTécnicas de modelagem de testes
Técnicas de modelagem de testes
 
Grupo de processos de planejamento - Parte 01
Grupo de processos de planejamento - Parte 01Grupo de processos de planejamento - Parte 01
Grupo de processos de planejamento - Parte 01
 
Introdução a testes unitários
Introdução a testes unitáriosIntrodução a testes unitários
Introdução a testes unitários
 
Grupos de processos de planejamento
Grupos de processos de planejamentoGrupos de processos de planejamento
Grupos de processos de planejamento
 
Gestão de projetos com PMBoK
Gestão de projetos com PMBoKGestão de projetos com PMBoK
Gestão de projetos com PMBoK
 
Grupos de processos de iniciação - PMBoK
Grupos de processos de iniciação - PMBoKGrupos de processos de iniciação - PMBoK
Grupos de processos de iniciação - PMBoK
 
Introdução a testes de software
Introdução a testes de softwareIntrodução a testes de software
Introdução a testes de software
 
Introdução a gestão de projetos com PMBoK
Introdução a gestão de projetos com PMBoKIntrodução a gestão de projetos com PMBoK
Introdução a gestão de projetos com PMBoK
 
Orientação a objetos com PHP
Orientação a objetos com PHPOrientação a objetos com PHP
Orientação a objetos com PHP
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
Tratamento de exceções com PHP
Tratamento de exceções com PHPTratamento de exceções com PHP
Tratamento de exceções com PHP
 
Introdução ao CSS
Introdução ao CSSIntrodução ao CSS
Introdução ao CSS
 
Criação de tabelas com HTML
Criação de tabelas com HTMLCriação de tabelas com HTML
Criação de tabelas com HTML
 
Criação de formulários e tabelas com HTML
Criação de formulários e tabelas com HTMLCriação de formulários e tabelas com HTML
Criação de formulários e tabelas com HTML
 
Uso de imagens e links com HTML
Uso de imagens e links com HTMLUso de imagens e links com HTML
Uso de imagens e links com HTML
 

Kürzlich hochgeladen

Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
RogrioGonalves41
 
QUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geralQUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geral
AntonioVieira539017
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
lenapinto
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
azulassessoria9
 

Kürzlich hochgeladen (20)

3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
 
QUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geralQUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geral
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPoesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 

Depuração de software

  • 1. Depuração de código Prof. Leonardo Soares e Silva
  • 2. Problema 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
  • 3. Problema 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; }
  • 4. Problema 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();
  • 5. Problemas Sabemos onde estão nossos erros, pois o Java nos avisa Estes avisos, para quem tem pouca experiência, podem ser difíceis de interpretar Além disto não sabemos exatamente o que levou eles a ocorrerem
  • 6. Como resolver Sabendo os valores das variáveis no momento de execução Saber o comportamento de nosso código Entendendo o que está acontecendo
  • 7. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
  • 8. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; } Session = null
  • 9. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
  • 10. II - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
  • 11. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
  • 12. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; } Session != null
  • 13. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
  • 14. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; } P = Objeto Pessoa
  • 17. Como funciona a depuração Corrigir o problema Executar o software Identificar onde está o erro Localizar o problema Ir passo a passo durante a execução do código Marcar o trecho do código que queremos “assistir”
  • 18. Conceitos importantes Ponto de parada (break point) Passar dentro (Step in) Passar fora (Step out) Passar por fora (Step over) Continuar (Continue)
  • 19. Ponto de parada Especifica onde queremos que a execução do nosso software pare A partir deste momento iremos depurar nossa aplicação Na maioria das IDEs é destacada com uma linha vermelha Podemos colocar quantos quiser
  • 21. Depuração do código Uma vez a execução do software parada, passamos a executá-lo linha a linha Na maioria das IDEs a linha em execução é marcada com a cor verde É possível entrar em métodos que são invocados Sair deles Passar por eles
  • 22. Linha em execução durante a depuração
  • 23. Step in Visualiza a execução de um método invocado public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
  • 24. Step in Visualiza a execução de um método invocado public Session getSession(){ … … }
  • 25. Step out Sai do passo a passo da execução de um método entrado através do Step in
  • 26. Step over Ignoramos o passo a passo de métodos que são invocados public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p;
  • 27. Step over Ignoramos o passo a passo de métodos que são invocados public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p;
  • 28. Continue Retorna a execução contínua do software
  • 30. Exercício Implementem os códigos e verifiquem o que ocorre
  • 31. Exercício 01 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"); }
  • 32. Exercício 02 public static void main(String[] args) { String nomes[] = new String[3]; nomes[1] = "disciplina"; nomes[2] = "teste"; nomes[3] = "software"; }
  • 33. Considerações sobre a depuração A utilizamos apenas quando há problemas ou dúvidas no código Passado este momento executamos nosso código normalmente
  • 34. Exercício para casa Identifiquem como funciona a depuração no Eclipse Explicação oral na próxima aula sobre o funcionamento e conceitos da depuração

Hinweis der Redaktion

  1. Qualerropodeocorrer?
  2. Écomoassistiraonossocódigosendoexecutado