java调试查看调用堆栈_关于调试:如何阅读和理解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)
那么这个例外的根本原因是什么?
从堆栈跟踪中,我发现OncePerRequestFilter类中的doFilter函数存在问题! 但是,当我在那里设置一个断点时,程序永远不会停在那个断点处。
谁能解释一下这个!?
在一般情况下,我应该如何使用该堆栈案例进行调试(从下到上或从上到下阅读)!
您通常应该从顶部读取 - 所以在这种情况下,UnixServerJobController的第66行在handleRequest方法中存在NullPointerException。该方法由SimpleControllerHandlerAdapter.handle调用,由DispatcherServlet.doDispatch调用。
但是,在这种特殊情况下,堆栈跟踪的第一帧可能就是您所需要的。查看UnixServerJobController的第66行,找出可能为null的内容,并采取相应措施。
请注意,有时一个异常包含在另一个异常中(也可能包含在另一个异常中,等等)。在这种情况下,您应该查看每个堆栈跟踪 - 通常它是"最嵌套"的异常,它提供了最有用的信息,因为这是根本原因。
"可能是堆栈跟踪的第一帧是你需要的所有",除非由于你提供了错误的参数集而引发了异常。
当异常被包装并重新抛出时,导入行将隐藏在中间
@JanDvorak:我指的是这个特殊的堆栈跟踪 - 会更清楚。
@TomaszNurkiewicz:是的,也会添加相关信息。
嗨乔恩,我一直很羡慕你。当你回答我的问题时,这很棒。 :d
通过"最嵌套",你的意思是最下面的那个?
@JoshBjelovuk:是的 - 真正引起这一切的那个。
通常,Exception的确切原因位于Stack Trace的第一行,有关该异常原因的更多信息,您需要逐渐向下移动,并且通常可以在靠近底部的某处找到根本原因。堆栈跟踪。
但在大多数情况下,您甚至可以从前几行获得异常原因。
所以,在这种情况下,你的异常是在handleRequest方法,当你向下移动时,那些是调用你以前的方法的方法(堆栈跟踪中当前方法之上的方法)
选民可以评论我错在哪里吗?
在企业java中,调用堆栈的底部通常是库函数,并不值得研究。
@JanDvorak ..可能是因为它不经常需要调查,但它是root原因对吗?所以,我说错了?
如果你想为所有员工的错误而受到指责,那么是的,图书馆是错的:-)
@JanDvorak ..好的。我认为..我编辑了帖子说 - somewhere near bottom ..你的情况可以证明它是合理的吗?
@JanDvorak ..如果我的修改后的帖子看起来没问题,你可以切换你的投票吗?或者,我希望你再解释一下,这样我就能更好地理解它并且更清楚......
从堆栈跟踪中可以看出,库中有9个堆栈帧,只有顶部框架是用户函数(可能会受到指责)。通常情况是原因接近顶部。
@JanDvorak好..谢谢你的解释..
"接近底部"并非如此。"往往靠近底部"可能会被淹没。"可以接近底部"当然是正确的,但并不能说明多少。
你的答案仍然要求责备doFilter。它肯定不是。
@JanDvorak ..谢谢Jan ..我已经相应地编辑了我的帖子..
最后一段没有多大意义。无论如何撤回;-)
@JanDvorak ..谢谢:)
这里也是一个非常有用的链接,了解如何从异常中读取堆栈跟踪:nurkiewicz.com/2011/09/logging-exceptions-root-cause-first.html
本教程可能会对您的问题有所了解,并帮助您更好地理解问题。
根据您的问题,您似乎在Unix服务器作业控制器类的第66行有一个空指针异常。
哦,太棒了,本教程是我正在寻找的,谢谢:D
谢谢你的链接
我发现本教程对我非常有用
https://forums.bukkit.org/threads/how-to-read-stack-traces-and-troubleshoot-your-own-plugins-by-yourself.32457/
这基本上只是一个链接答案,这几乎不是一个好主意。 (例如,如果删除链接页面,则完全无用。)您至少应该引用帖子中最重要的部分。
java调试查看调用堆栈_关于调试:如何阅读和理解java堆栈跟踪?相关推荐
- java如何查看调用记录_查看Java记录
java如何查看调用记录 JEP 359 (可在JDK 14中用作预览功能)将记录引入Java. 记录是对普通数据聚合建模的简单方法. 一个简单的范围记录如下所示: record Range( int ...
- java主程序怎样调用子程序_存过和函数以及在Java程序中的调用
存储过程,函数都是数据库的对象. 创建和调用 存储在数据库中的子程序,是由plsql语言写的,完成特定功能的程序. 函数可以返回值,存过不能返回值.除此之外,一致. create procedure ...
- java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题
在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...
- vconsole 调试 查看LOG VUE在手机上调试 手机查看h5的日志
简单介绍下vConsole: vConsole是一个由微信公众平台前端团队研发的web前端开发者面板,可用于展示console日志,方便开发.调试. 使用场景1,在vue-cli 构建的项目中使用: ...
- java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...
小编典典 您可以使用MethodHandle.其Javadoc写道: 使用Lookup API中的工厂方法,可以将Core Reflection API对象表示的任何类成员转换为行为等效的方法句柄.例 ...
- java技术全掌握了_你必须掌握的 21 个 Java 核心技术!
写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE ...
- java退出不报异常_如何优雅的处理异常(java)?
这篇文章应该可以解答你的疑问. Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题:什么出了错? ...
- java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...
一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...
- java 笔试题一套_软世通分享一套Java笔试题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 7.以下程序段执行后的K值为( ). int x=20; y=30; k=(x>y)?y:x A. 20 B. 30 C.10 D.50 8.要想定 ...
- java读写德卡数据_深圳德卡D3-U读写卡器windows(Java),linux(C)驱动开发 | 学步园
在D3的Java文件夹下有文件夹两个:classpackage.example,文件一个:readme.txt. classpackage中的 javaRD800.dll 是一个面向Java JNI ...
最新文章
- 施一公:年轻人不要花时间去拉关系,尽全力做研究,以实力取胜!
- [数分提高]2014-2015-2第4教学周第2次课
- BCH生态:用价值创造价值
- 并发编程之对象的发布和逸出
- AndroidManifest.xml文件剖析
- SQLServer表内自关联级联删除
- springboot MVC视图解析流程源码分析
- java mp4 视频时间戳_MP4文件中音视频时间戳的计算
- wordpress4.9服务器迁移
- 支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos
- 关于java.lang.ClassNotFoundException
- Roll A Ball 案例学习
- 使用阿里云加速器 配置 Docker 镜像加速器
- android微信表情导出来的,微信表情怎么导出 如何批量备份微信表情
- 微信表情存入mysql
- 计算机两个活动分区,硬盘无法设置活动分区,硬盘只能有一个活动分区吗
- ansys linux卸载干净,怎么把ansys删除干净
- 快速了解Mybatis Plus 的用法以及使用举例
- Python 后台启动程序
- 查找和排序-——旋转数组的最小数字