Depuração de códigoProf. Leonardo Soares e Silva
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();
ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao obter a lista de Servidores.", ""));
Problema
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
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
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
Session = null
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;
}
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
Session != null
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
P = Objeto Pessoa
Depuração de código
Depuração de código
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
Ponto de parada (break point)
Passar dentro (Step in)
Passar fora (Step out)
Passar por fora (Step over)
Continuar (Continue)
Conceitos importantes
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
Depuração de 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 é marcadacom a cor verde
É possível entrar em métodos que são invocados
Sair deles
Passar por eles
Depuração do código
Linha em execução durante a depuração
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;
}
Visualiza a execução de um método invocado
Step in
public Session getSession(){
…
…
}
Sai do passo a passo da execução de um métodoentrado através do Step in
Step out
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;
}
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;
}
Retorna a execução contínua do software
Continue
Exemplo de depuração
Implementem os códigos e verifiquem o que ocorre
Exercício
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
public static void main(String[] args) {
String nomes[] = new String[3];
nomes[1] = "disciplina";
nomes[2] = "teste";
nomes[3] = "software";
}
Exercício 02
A utilizamos apenas quando há problemas ou dúvidasno código
Passado este momento executamos nosso códigonormalmente
Considerações sobre a depuração
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
Top Related