Как читать и понимать трассировку стека Java? [дубликат]


этот вопрос уже есть ответ здесь:

  • Что такое трассировка стека, и как я могу использовать это для отладки мои ошибки приложения? 7 ответов

например, я получил трассировку стека следующим образом:

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)

Так что же является основной причиной этого исключения? От трассировки стека, я узнал, что есть проблема с doFilter функция в OncePerRequestFilter класс! Однако, когда я ставлю точку останова там, и программа никогда не останавливается на этой точке останова.

может ли кто-нибудь дать объяснение об этом!? И в общем случае, как я должен использовать этот случай стека для отладки (читать снизу вверх или сверху вниз)!

4 58

4 ответа:

вообще точная причина для Exception находится в первой строке трассировки стека, и для получения дополнительной информации о причине этого исключения вам нужно постепенно двигаться вниз, а первопричину часто можно найти где-то в нижней части трассировки стека.

но в большинстве случаев вы даже можете получить причину исключения из первых нескольких строк..

Итак, в этом случае, ваше исключение составляет handleRequest способ, и когда вы двигаетесь вниз, это методы, которые вызвали ваш предыдущий метод (тот, что выше текущего метода в трассировке стека)

обычно вы должны читать сверху-так что в этом случае есть исключение NullPointerException в строке 66 UnixServerJobController, в handleRequest метод. Этот метод был вызван SimpleControllerHandlerAdapter.handle, который был вызван DispatcherServlet.doDispatch etc.

однако в этом конкретном случае вполне вероятно, что первый кадр трассировки стека-это все, что вам нужно. Посмотрите на строку 66 из UnixServerJobController, разобраться, что может быть null, и действовать соответственно.

обратите внимание, что иногда одно исключение обернуто в другой (который, в свою очередь, может быть завернут в другой и т. д.). В этом случае вы должны смотреть на каждого трассировки стека-часто это" самое вложенное " исключение, которое дает самую полезную информацию, так как это основная причина.

этой учебник может пролить свет на вашу проблему и помочь вам лучше понять вещи.

согласно вашей проблеме, у вас, похоже, есть исключение нулевого указателя в строке 66 класса контроллера заданий сервера Unix.

Я нашел этот учебник очень полезен для меня https://forums.bukkit.org/threads/how-to-read-stack-traces-and-troubleshoot-your-own-plugins-by-yourself.32457/