Как читать и понимать трассировку стека java?
Например, я получил трассировку стека следующим образом:
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
! Однако, когда я помещаю точку останова там, и программа никогда не останавливается в этой точке прерывания.
Может ли кто-нибудь объяснить это??
И в общем случае, как я должен использовать этот случай стека для отладки (читаем снизу вверх или сверху вниз)!
Ответы
Ответ 1
Как правило, точная причина для Exception
находится в первой строке вашего Stack Trace, и для получения дополнительной информации о причине этого исключения вам необходимо постепенно перемещаться вниз, а основную причину часто можно найти где-то рядом нижней части трассировки стека.
Но в большинстве случаев вы даже можете получить причину исключения из первых нескольких строк.
Итак, в этом случае ваше исключение находится в методе handleRequest
, и когда вы перемещаетесь вниз, это методы, которые вызывают ваш предыдущий метод (тот, который находится выше текущего метода в трассировке стека)
Ответ 2
Обычно вы должны читать сверху - так что в этом случае существует исключение NullPointerException в строке 66 UnixServerJobController в методе handleRequest
. Этот метод был вызван SimpleControllerHandlerAdapter.handle
, который был вызван DispatcherServlet.doDispatch
и т.д.
Однако в этом конкретном случае вероятно, что первый кадр трассировки стека - это все, что вам нужно. Посмотрите на строку 66 из UnixServerJobController
, определите, что может быть нулевым, и действуйте соответственно.
Обратите внимание, что иногда одно исключение обернуто в другое (которое, в свою очередь, может быть обернуто другим и т.д.). В этом случае вы должны посмотреть на каждую трассировку стека - часто это "самое вложенное" исключение, которое дает самую полезную информацию, а также основную причину.
Ответ 3
Этот учебник может пролить свет на вашу проблему и помочь вам лучше понять ситуацию.
В соответствии с вашей проблемой у вас, похоже, есть исключение Null Pointer в строке 66 класса контроллера заданий Unix Server.
Ответ 4
Я нашел, что этот учебник очень полезен для меня
https://forums.bukkit.org/threads/how-to-read-stack-traces-and-troubleshoot-your-own-plugins-by-yourself.32457/