当前位置: 首页 > 知识库问答 >
问题:

如何阅读和理解java堆栈跟踪?[副本]

阎晋
2023-03-14

例如,我得到了一个堆栈跟踪,如下所示:

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)

那么这个异常的根本原因是什么呢?从堆栈跟踪中,我发现OncePerRequestFilter类中的doFilter函数存在问题!然而,当我把一个断点放在那里,程序永远不会停在那个断点上。

有人能解释一下吗?在一般情况下,我应该如何使用堆栈进行调试(从下到上读或从上到下读)!

共有1个答案

江宏深
2023-03-14

通常,异常的确切原因位于堆栈跟踪的第一行,要获得有关该异常原因的更多信息,需要逐步向下移动,根本原因通常可以在堆栈跟踪的底部附近找到。

但在大多数情况下,您甚至可以从前几行得到异常的原因…

因此,在本例中,您的异常位于HandleRequest方法,当您向下移动时,这些方法调用了您以前的方法(堆栈跟踪中当前方法上方的方法)

 类似资料:
  • 问题内容: 例如,我得到了这样的堆栈跟踪: 那么,此异常的根本原因是什么?从堆栈跟踪中,我发现类中的函数存在问题!但是,当我在此处放置一个断点时,程序永远不会在该断点处停止。 谁能给这个解释!在一般情况下,我应该如何使用该堆栈情况进行调试(从下至上或从上至下读取)! 问题答案: 通常,确切的原因在堆栈跟踪的第一行,有关该异常原因的更多信息,你需要逐步向下移动,并且根本原因通常可以在堆栈跟踪底部的某

  • 问题内容: 程序中没有单个方法“知道”它在堆栈中的位置。它所知道的只是它自己的小工作,它完成了并返回了。因此,当引发异常并打印堆栈跟踪时,它是从哪里来的? 在JVM中监视程序状态的每个应用程序旁边隐式地运行着一个单独的线程吗?还是JVM本身保存此信息,并且在抛出异常时以某种方式从异常中提取数据? 如果是上述两种情况之一,是否可以使用某些调用来检索堆栈跟踪(从监视器线程或JVM) 而不会 引发异常?

  • 问题内容: 如何理解java的栈跟踪(stack trace) ?怎样使用它来调试程序? 问题答案: 简单来说,堆栈跟踪是应用程序在引发时处于中间的方法调用的列表。 简单的例子 通过问题中给出的示例,我们可以准确确定在应用程序中引发异常的位置。让我们看一下堆栈跟踪: 这是一个非常简单的堆栈跟踪。如果我们从列表的开头开始,我们可以判断出错误发生在哪里。我们正在寻找的是应用程序中最顶层的方法调用。在这

  • 当Xdebug被激活时,只要PHP决定显示通知,警告,错误等,就会显示堆栈跟踪。堆栈跟踪显示的信息以及显示方式可以根据您的需要进行配置。 Xdebug在错误情况下显示的堆栈跟踪信息量相当保守(如果display.errors 在php.ini中设置为On)。这是因为大量的信息会减慢脚本的执行速度和浏览器中堆栈跟踪本身的渲染速度。但是,可以使堆栈轨迹以不同的设置显示更详细的信息。 堆栈跟踪中的变量

  • 问题内容: 当您在Java中使用RMI时,收到异常时将在其前面添加远程堆栈跟踪,如下所示: 那种堆栈跟踪“伪造”如何完成? 我想要什么(除了被迭代)?好吧,如果我能这样做的话,它将对我有帮助: 并使其成为引发日志记录的目的,在堆栈跟踪中也将引发异常(并且方法在链的下游)。 问题答案: 这很容易: Throwable有方法和。 从我的一个项目(非开源,但也许有一天我将打开远程调用引擎): 为了您的方

  • 问题内容: 更新 :Intellij IDEA的最新版本完全实现了我想要的功能。问题是如何在IDE外部实现此功能(以便我可以将异步堆栈跟踪信息转储到日志文件中),理想情况下无需使用检测代理。 自从我将应用程序从同步模型转换为异步模型以来,调试故障一直遇到问题。 当我使用同步API时,我总是在异常stacktraces中找到我的类,因此我知道从哪里开始寻找问题。使用异步API,我得到的堆栈跟踪既不引