Como debugar

9 respostas
P

Oi pessoal, boa tarde.

Preciso de uma ajuda urgente. Quero debugar uma aplicação para achar um nullpointer, como faço para debugar a aplicação e ver o que está acontecendo a cada linha de comando? Preciso de um passo a passo.
Alguém tem ou conhece algum material/artigo/livro/revista que fale sobre os erros mais comuns e de como resolve-los.

Desde já agradeço pela atenção de todos.

9 Respostas

Andre_Fonseca

programmerJava:
Oi pessoal, boa tarde.

Preciso de uma ajuda urgente. Quero debugar uma aplicação para achar um nullpointer, como faço para debugar a aplicação e ver o que está acontecendo a cada linha de comando? Preciso de um passo a passo.
Alguém tem ou conhece algum material/artigo/livro/revista que fale sobre os erros mais comuns e de como resolve-los.

Desde já agradeço pela atenção de todos.

oi, boa tarde :smiley:

Seja bem vindo ao fórum, vc está usando Eclipse, Netbeans ou outra IDE? Ou não está usando IDE?

abs

thiago.correa

Bom, primeiro para depurar um programa você precisa de um ambiente de desenvolvimento, (IDE), como o eclipse, NetBeans,JDeveloper, todos esses são gratuitos, voltados para a plataforma Java cada um com sua peculiaridade!

Daí, vai de ambiente para ambiente, mas todos em sua maioria, possuem a mesma lógica, você executa o programa em modo Debug, adiciona o BreakPoint na linha que você deseja parar e daí você tem acesso aos atributos e seus valores em tempo de execução.

Mas te adianto que NPE ocorre quando você tentar acessar um atributo ou método de um objeto que não tenha sido instanciado

ex.:

StringBuffer sb = null; sb.append("Ola");//aqui irá ocorrer o NPE

E

Um exemplo: você pode rodar sua aplicação com o Eclipse, e antes de rodá-la (com “Debug”), você precisa acionar um “breakpoint” para a exceção que está ocorrendo (java.lang.NullPointerException).


P

Oi pessoal,

Debugando aqui, descobri que o nullpointer está acontecendo porque está faltando a(s) lib(s) do Firebird para o Java, já fui no site da Firebird, baixei um monte de libs lá do link firebird-jca-jdbc-driver e nada.
Vocês poderiam me indicar as libs para usar o Firebird com o Java.
Abaixo segue toda a descrição do erro que aparece no Console:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: #{carrosView.create}: java.lang.ExceptionInInitializerError
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)

root cause

javax.faces.FacesException: #{carrosView.create}: java.lang.ExceptionInInitializerError

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

javax.faces.el.EvaluationException: java.lang.ExceptionInInitializerError

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

java.lang.ExceptionInInitializerError

pacote.util.ConnectionConcessionariaFactory.(ConnectionConcessionariaFactory.java:21)

pacoteDAO.CarrosDAO.salvar(CarrosDAO.java:20)

pacote.Controller.CarrosController.create(CarrosController.java:78)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:597)

org.apache.el.parser.AstValue.invoke(AstValue.java:172)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

java.lang.NoSuchFieldError: level

org.apache.log4j.spi.RootLogger.setLevel(RootLogger.java:65)

org.apache.log4j.spi.RootLogger.(RootLogger.java:44)

org.apache.log4j.LogManager.(LogManager.java:78)

org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)

org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:243)

org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)

org.hibernate.cfg.Configuration.(Configuration.java:151)

pacote.util.ConnectionConcessionariaFactory.(ConnectionConcessionariaFactory.java:18)

pacoteDAO.CarrosDAO.salvar(CarrosDAO.java:20)

pacote.Controller.CarrosController.create(CarrosController.java:78)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:597)

org.apache.el.parser.AstValue.invoke(AstValue.java:172)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.


Apache Tomcat/6.0.18

Andre_Fonseca

oi,

dá uma olhada no link abaixo

como você chegou a está conclusão? não seria má configuração? vc ta usando JSF?

abs

P

Sim, estou usando JSF e Hibernate.

P

Oi pessoal, bom dia. Obrigado mesmo pela ajuda.
Cheguei a essa conclusão porque não estavam sendo inicializados os objetos que estavam sendo usados lá na minha classe de conexão. Obrigado André, realmente estava faltando a lib para usar o banco de dados do Firebird.
Agora não tenho nem um nullpointer e nem um Class Not Found/Def Found, mas sim uma Exceção.
Abaixo segue o código da minha classe de conexão, reparei que durante a execução, ela não consegue passar pelo try, entra no catch e fica na exceção.

package pacote.util;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

public class ConnectionConcessionariaFactory {

private static final SessionFactory sessionFactory;
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

static{
	try{
		sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
		
	} catch(Throwable t){
		throw new ExceptionInInitializerError(t);
	
		
	}
}
public static Session getInstance(){
		Session session = (Session)threadLocal.get();
		session = sessionFactory.openSession();
		threadLocal.set(session);
		return session;
}

}

Agora segue o que aparece no erro:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: #{carrosView.create}: java.lang.ExceptionInInitializerError
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)

root cause

javax.faces.FacesException: #{carrosView.create}: java.lang.ExceptionInInitializerError

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

javax.faces.el.EvaluationException: java.lang.ExceptionInInitializerError

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

java.lang.ExceptionInInitializerError

pacote.util.ConnectionConcessionariaFactory.(ConnectionConcessionariaFactory.java:20)

pacoteDAO.CarrosDAO.salvar(CarrosDAO.java:20)

pacote.Controller.CarrosController.create(CarrosController.java:78)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:597)

org.apache.el.parser.AstValue.invoke(AstValue.java:172)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

java.lang.NoSuchFieldError: level

org.apache.log4j.spi.RootLogger.setLevel(RootLogger.java:65)

org.apache.log4j.spi.RootLogger.(RootLogger.java:44)

org.apache.log4j.LogManager.(LogManager.java:78)

org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)

org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:243)

org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)

org.hibernate.cfg.Configuration.(Configuration.java:151)

pacote.util.ConnectionConcessionariaFactory.(ConnectionConcessionariaFactory.java:17)

pacoteDAO.CarrosDAO.salvar(CarrosDAO.java:20)

pacote.Controller.CarrosController.create(CarrosController.java:78)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:597)

org.apache.el.parser.AstValue.invoke(AstValue.java:172)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.


Apache Tomcat/6.0.18

Andre_Fonseca

programmerJava:
Oi pessoal, bom dia. Obrigado mesmo pela ajuda.
Cheguei a essa conclusão porque não estavam sendo inicializados os objetos que estavam sendo usados lá na minha classe de conexão. Obrigado André, realmente estava faltando a lib para usar o banco de dados do Firebird.
Agora não tenho nem um nullpointer e nem um Class Not Found/Def Found, mas sim uma Exceção.
Abaixo segue o código da minha classe de conexão, reparei que durante a execução, ela não consegue passar pelo try, entra no catch e fica na exceção.

package pacote.util;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

public class ConnectionConcessionariaFactory {

private static final SessionFactory sessionFactory;
private static final ThreadLocal&lt;Session&gt; threadLocal = new ThreadLocal&lt;Session&gt;();

static{
	try{
		sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
		
	} catch(Throwable t){
		throw new ExceptionInInitializerError(t);
	
		
	}
}
public static Session getInstance(){
		Session session = (Session)threadLocal.get();
		session = sessionFactory.openSession();
		threadLocal.set(session);
		return session;
}

}

Agora segue o que aparece no erro:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: #{carrosView.create}: java.lang.ExceptionInInitializerError
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)

root cause

javax.faces.FacesException: #{carrosView.create}: java.lang.ExceptionInInitializerError

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

javax.faces.el.EvaluationException: java.lang.ExceptionInInitializerError

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

java.lang.ExceptionInInitializerError

pacote.util.ConnectionConcessionariaFactory.<clinit>(ConnectionConcessionariaFactory.java:20)

pacoteDAO.CarrosDAO.salvar(CarrosDAO.java:20)

pacote.Controller.CarrosController.create(CarrosController.java:78)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:597)

org.apache.el.parser.AstValue.invoke(AstValue.java:172)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

root cause

java.lang.NoSuchFieldError: level

org.apache.log4j.spi.RootLogger.setLevel(RootLogger.java:65)

org.apache.log4j.spi.RootLogger.<init>(RootLogger.java:44)

org.apache.log4j.LogManager.<clinit>(LogManager.java:78)

org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)

org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:243)

org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)

org.hibernate.cfg.Configuration.<clinit>(Configuration.java:151)

pacote.util.ConnectionConcessionariaFactory.<clinit>(ConnectionConcessionariaFactory.java:17)

pacoteDAO.CarrosDAO.salvar(CarrosDAO.java:20)

pacote.Controller.CarrosController.create(CarrosController.java:78)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:597)

org.apache.el.parser.AstValue.invoke(AstValue.java:172)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:387)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.


Apache Tomcat/6.0.18

oi, conseguiu resolver o problema já?

caso não tenha conseguido, tente mudar a inicialização da sessão para um construtor e não dentro de um bloco estático, não precisa ser uma variável estática também.
você está usando alguma IDE como eclipse ou netbeans??

analisando a stack trace o seu erro está aparecendo aqui

abs

P

Oi consegui sim, mexi tanto que consegui tirar o tal erro, só não pergunte como que nem eu mesmo sei!!rsrsrs

Criado 21 de janeiro de 2010
Ultima resposta 5 de fev. de 2010
Respostas 9
Participantes 4