68 votes

Comment lire et comprendre la trace de la pile java ?

Par exemple, j'ai obtenu 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)

Alors, quelle est la cause profonde de cette exception ? A partir de la trace de la pile, j'ai découvert qu'il y a un problème avec la fonction doFilter dans la classe OnceRequestPerFilter ! Cependant, lorsque je place un point d'arrêt à cet endroit, le programme ne s'arrête jamais à ce point d'arrêt.

Quelqu'un peut-il me donner des explications à ce sujet ? Et en général, comment dois-je utiliser cette pile pour le débogage (lecture de bas en haut ou de haut en bas) ?

Mercisss

70voto

Jon Skeet Points 692016

Vous devez généralement lire à partir du haut. Dans ce cas, il y a une exception NullPointerException à la ligne 66 de UnixServerJobController, dans le fichier handleRequest méthode. 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 trame de la trace de la pile est tout ce dont vous avez besoin. Regardez la ligne 66 de UnixServerJobController de déterminer ce qui pourrait être nul, et d'agir en conséquence.

Notez 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 devez regarder cada des traces de la pile - souvent, c'est l'exception "la plus imbriquée" qui donne les informations les plus utiles, car c'est la cause première.

50voto

Rohit Jain Points 90368

Généralement, la raison exacte de la Exception se trouve à la première ligne de votre Stack Trace .. Et pour obtenir plus d'informations sur la cause de cette exception, il faut descendre progressivement, et la cause première peut souvent être trouvée. somewhere near le bas de la trace de la pile.

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

Donc, dans ce cas, votre exception est à handleRequest et lorsque vous vous déplacez vers le bas, ce sont les méthodes qui ont invoqué votre méthode précédente (celle qui se trouve au-dessus de la méthode actuelle dans le suivi de pile) .

8voto

npinti Points 26029

Ce site Le tutorat pourrait vous éclairer sur votre problème et vous aider à mieux comprendre les choses.

En ce qui concerne votre problème, il semble que vous ayez une exception de type Null Pointer à la ligne 66 de la classe Unix Server Job Controller.

2voto

Mytic Moon Points 228

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X