Comment lire et comprendre la trace de la pile java? [dupliquer]

cette question a déjà une réponse ici:

  • qu'est Ce qu'une trace de la pile, et comment puis-je l'utiliser pour déboguer mes erreurs d'application? 7 réponses

par exemple, j'ai une trace de pile comme celle-ci:

java.lang.NullPointerException
abc.investxa.presentation.controllers.UnixServerJobController.handleRequest(UnixServerJobController.java:66)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

Quelle est donc la cause profonde de cette exception? D'après la trace de la pile, j'ai découvert qu'il y a un problème avec la fonction doFilter dans la classe OncePerRequestFilter ! Cependant, quand je mets un point d'arrêt là et le programme ne s'arrête jamais à ce point d'arrêt.

est-ce que quelqu'un pourrait donner des explications à ce sujet!? Et en général, comment utiliser ce cas de pile pour déboguer (lire de bas en haut ou de haut en bas)!

58
demandé sur ROMANIA_engineer 2012-10-02 13:49:12

4 réponses

généralement, la raison exacte du Exception est à la première ligne de votre trace de pile, et pour plus d'informations sur la cause de cette exception, vous devez progressivement vous déplacer vers le bas, et la cause racine peut souvent être trouvée quelque part près du bas de la trace de pile.

mais dans la plupart des cas, vous pouvez même obtenir la cause de l'exception des premières lignes..

donc, dans ce cas, votre exception est à handleRequest méthode, et quand vous vous déplacez vers le bas, ce sont les méthodes, qui ont invoqué votre méthode précédente (celle au-dessus de la méthode actuelle dans stack trace)

40
répondu Rohit Jain 2016-05-12 19:40:06

vous devriez généralement lire depuis le haut - donc dans ce cas, il y a une exception NullPointerException à la ligne 66 D'UnixServerJobController, dans la méthode handleRequest . Cette méthode a été appelée par SimpleControllerHandlerAdapter.handle , qui a été appelé par DispatcherServlet.doDispatch etc.

cependant, dans ce cas particulier, il est probable que la première image de la trace de la pile est tout ce dont vous avez besoin. Regardez la ligne 66 de UnixServerJobController , trouvez ce qui pourrait être nul et agissez en conséquence.

Note que parfois une exception est enveloppée dans une autre (qui peut à son tour être enveloppée dans une autre, etc.). Dans ce cas, vous devriez regarder chaque des traces de pile - souvent c'est l'exception "la plus imbriquée" qui donne les informations les plus utiles, car c'est la cause fondamentale.

67
répondu Jon Skeet 2012-10-02 10:00:15

ce tutoriel pourrait vous éclairer sur votre problème et vous aider à mieux comprendre les choses.

selon votre problème, vous semblez avoir une Exception de pointeur nul à la ligne 66 de la classe de contrôleur de tâches Unix Server.

7
répondu npinti 2012-10-02 09:52:29