Подтвердить что ты не робот

Как читать и понимать трассировку стека 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! Однако, когда я помещаю точку останова там, и программа никогда не останавливается в этой точке прерывания.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Этот учебник может пролить свет на вашу проблему и помочь вам лучше понять ситуацию.

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