O documento discute depuração de código e fornece exemplos para demonstrar como identificar e corrigir erros. Apresenta conceitos como ponto de parada, passar dentro, passar fora e continuar, e como usá-los para depurar passo a passo e localizar problemas. Também inclui exercícios para que os alunos pratiquem a depuração.
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
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;
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");
}
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