SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

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...Paulo Henrique Lerbach Rodrigues
 
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 GenericsSérgio Souza Costa
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação FuncionalTales Andrade
 
[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 StringBuilderLoiane Groner
 
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 01thomasdacosta
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricksTales Andrade
 
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 #3Ismar Silveira
 
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 Fontethomasdacosta
 
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 factoryboyLeonardo Galani
 
[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 exceptionLoiane Groner
 
Workshop de Certificação Java - Onixlab
Workshop de Certificação Java - OnixlabWorkshop de Certificação Java - Onixlab
Workshop de Certificação Java - OnixlabThiago Teixeira
 
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
 

Mais procurados (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...
 

Semelhante a Depuração de código para correção de erros

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 completaEduardo Bregaida
 
Polimorfismo
PolimorfismoPolimorfismo
PolimorfismoCaveiras
 
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 ...iMasters
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
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 Javaelliando 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
 
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 GearmanElton Minetto
 
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...Ricardo Valeriano
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 
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 AppsDiego Castro
 
Privilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisPrivilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisRafael Barbolo
 
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 JavaElaine Cecília Gatto
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)Pablo Dall'Oglio
 
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 InterfacesDevCamp Campinas
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 

Semelhante a Depuração de código para correção de erros (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
 

Mais de Leonardo Soares

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 LuaLeonardo Soares
 
Introdução ao HTML4 e HTML5
Introdução ao HTML4 e HTML5Introdução ao HTML4 e HTML5
Introdução ao HTML4 e HTML5Leonardo Soares
 
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 jUnitLeonardo Soares
 
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 02Leonardo Soares
 
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 TouchLeonardo Soares
 
Técnicas de modelagem de testes
Técnicas de modelagem de testesTécnicas de modelagem de testes
Técnicas de modelagem de testesLeonardo Soares
 
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 01Leonardo Soares
 
Introdução a testes unitários
Introdução a testes unitáriosIntrodução a testes unitários
Introdução a testes unitáriosLeonardo Soares
 
Grupos de processos de planejamento
Grupos de processos de planejamentoGrupos de processos de planejamento
Grupos de processos de planejamentoLeonardo Soares
 
Gestão de projetos com PMBoK
Gestão de projetos com PMBoKGestão de projetos com PMBoK
Gestão de projetos com PMBoKLeonardo Soares
 
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 - PMBoKLeonardo Soares
 
Introdução a testes de software
Introdução a testes de softwareIntrodução a testes de software
Introdução a testes de softwareLeonardo Soares
 
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 PMBoKLeonardo Soares
 
Orientação a objetos com PHP
Orientação a objetos com PHPOrientação a objetos com PHP
Orientação a objetos com PHPLeonardo Soares
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHPLeonardo Soares
 
Tratamento de exceções com PHP
Tratamento de exceções com PHPTratamento de exceções com PHP
Tratamento de exceções com PHPLeonardo Soares
 
Criação de tabelas com HTML
Criação de tabelas com HTMLCriação de tabelas com HTML
Criação de tabelas com HTMLLeonardo Soares
 
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 HTMLLeonardo Soares
 
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 HTMLLeonardo Soares
 

Mais de 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
 

Último

Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSilvana Silva
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumPatrícia de Sá Freire, PhD. Eng.
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfEditoraEnovus
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...ArianeLima50
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.keislayyovera123
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxKtiaOliveira68
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 

Último (20)

Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptx
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comum
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdf
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptx
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 

Depuração de código para correção de erros

  • 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

Notas do Editor

  1. Qualerropodeocorrer?
  2. Écomoassistiraonossocódigosendoexecutado