web-dev-qa-db-ja.com

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関数に問題があることがわかりました。ただし、ブレークポイントをそこに配置すると、プログラムはそのブレークポイントで停止しません。

誰もこれについて説明できますか!?そして一般的な場合、そのスタックケースをデバッグにどのように使用する必要がありますか(下から上または上から下に読む)!

65
Toby D

通常、Exceptionの正確な理由は、スタックトレースの最初の行にあります。その例外の原因に関する詳細については、徐々に下に移動する必要があり、多くの場合、根本原因は近くのどこかにあります。スタックトレースの下部。

しかし、ほとんどの場合、最初の数行から例外の原因を取得することもできます。

したがって、この場合、例外はhandleRequestメソッドにあり、下に移動すると、それらは前のメソッド(スタックトレースで現在のメソッドの上にあるメソッド)を呼び出したメソッドになります。

46
Rohit Jain

通常は上から読む必要があります。したがって、この場合、handleRequestメソッドのUnixServerJobControllerの66行目にNullPointerExceptionがあります。そのメソッドはSimpleControllerHandlerAdapter.handleによって呼び出され、DispatcherServlet.doDispatchなどによって呼び出されました。

ただし、この特定のケースでは、スタックトレースの最初のフレームだけが必要な場合があります。 UnixServerJobControllerの66行目を見て、nullの可能性があるものを見つけて、それに応じて行動します。

1つの例外が別の例外にラップされる場合があることに注意してください(別の例外にラップされる場合もあります)。この場合、スタックトレースのeachを確認する必要があります。多くの場合、それが根本原因であるため、最も有用な情報を提供する「最もネストされた」例外です。

68
Jon Skeet

これ チュートリアルは、問題に光を当て、物事をよりよく理解するのに役立つ場合があります。

問題ごとに、Unix Server Job Controllerクラスの行66でNullポインタ例外が発生しているようです。

7
npinti

このチュートリアルは私にとって非常に有用であることがわかりました https://forums.bukkit.org/threads/how-to-read-stack-traces-and-troubleshoot-your-own-plugins-by-yourself.32457 /

2
Toby D