您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
Java程序出错了,定位错误有哪些技巧?
错误,代码,日志Java程序出错了,定位错误有哪些技巧?
发布时间:2020-12-06加入收藏来源:互联网点击:
回答于 2019-09-11 08:43:50
1.概述
在本教程中,我们将研究一些高级IntelliJ调试工具。假定大家已了解调试基础知识(如何开始调试,Step Into,Step Over 操作等)。如果不是,请参考本文以获取更多详细信息。
2.Smart
Step Into在某些情况下,会在一行源代码上调用多个方法,例如 doJob(getArg1(),getArg2())。如果调用单步执行(F7),则调试器将按照JVM用于评估的顺序进入方法: getArg1 – getArg2 – doJob。
但是,我们可能要跳过所有中间调用,然后直接进入目标方法。聪明的步入行动可以做到这一点。
默认情况下,它绑定到Shift + F7,并且在调用时如下所示:
现在我们可以选择目标方法。另外,请注意,IntelliJ始终将最外面的方法放在列表的顶部。这意味着我们可以通过按Shift + F7 | 输入。
3.Drop Frame
我们可能意识到,我们感兴趣的某些处理已经发生(例如,当前方法参数的计算)。在这种情况下,可以丢弃当前的JVM堆栈框架以对其进行重新处理。
请考虑以下情况:
假设我们有兴趣调试getArg1处理,因此我们删除当前帧(doJob方法):
现在我们处于先前的方法中:
但是,此时调用参数已经计算完毕,因此,我们还需要删除当前帧:
现在,我们可以通过调用Step Into重新运行该处理。
4.当前断点
有时,非私有字段是由其他类修改的,而不是通过setter修改的,而是直接修改的(第三方库就是这种情况,我们不控制源代码)。
在这种情况下,可能很难理解何时进行修改。IntelliJ允许创建字段级断点来跟踪。
它们像往常一样设置–左键单击字段行上的左侧编辑器装订线。之后,可以打开断点属性(在断点标记上单击鼠标右键)并配置我们是否对字段的读取,写入或两者感兴趣:
5.记录断点
有时我们知道应用程序中存在竞争条件,但不知道它到底在哪里。要确定它可能是一个挑战,尤其是在使用新代码时。
我们可以将调试语句添加到程序的源代码中。但是,第三方库没有这种功能。
IDE可以在这里提供帮助- 它允许设置断点,这些断点一旦被击中就不会阻止执行,而是产生日志记录语句。
假设我们有兴趣记录实际的 isInterested 调用的参数。
让我们在目标方法中创建一个非阻塞断点(Shift +左键单击左编辑器装订线)。之后,让我们打开其属性(在断点上单击鼠标右键)并定义要记录的目标表达式:
6.创建标记
当应用程序在断点处停止并且可以从堆栈帧访问目标时,可以标记对象。选择它,然后按F11(“ 标记对象”操作)并定义目标名称:
7.结论
我们检查了许多在调试多线程应用程序时可以大大提高生产率的技术。这通常是一项艰巨的任务,所以在这里我们不能低估工具帮助的重要性,毕竟不是在写Bug的路上就是在改Bug的路上(手动狗头)。
回答于 2019-09-11 08:43:50
1 控制台报错的信息
通过查看控制台报错信息,将报错内容翻译出来(通过多次项目编码的过程中,大部分报错信息都差不多,可以记住一些常见的英文单词,以便下次可以快速的定位问题),这样基本上就可以将问题定位出来,这也是最好解决的状况,也是表明你是菜鸟的重要体现(不过没有关系,下次注意就好了,成长是需要一个过程的)。
2 使用debug定位+try catch捕获异常信息
该方法主要是针对本地代码可以启动,页面也可以正常显示,某些功能不能正常实现的问题。首先确保项目是用debug起的,将具体的方法代码找到,打上断点,找到具体的报错的地方,使用try-catch将异常信息打印出来,通过控制台查看异常信息,定位问题。(该方法主要是适用于自己写的需求代码,也是开发过程中最常用的定位问题手段)
3 查看log日志信息
这个手段也是我们在开发过程中常用的,我们可以通过查看log日志看到具体报错信息,用一个文本编辑器打开(我使用的是EditPlus),先将原来的日志信息删除,然后在重新点开页面,使用EditPlus的话点击重新载入就可以看到新的报日志信息,将error的信息选中,定位error就好了。
4 使用xshell查看日志信息
如果你们公司项目每个方法进出都记录了操作日志或者info日志,你可以使用xshell查看错误信息,直接定位环境上的错误信息(线上项目)
总的一句话,主要我们在项目中经常性的总结,随着接触的项目需求越来越多,我们定位问题的速度也是越来越快的,记住:千里之行始于足下,坚持到最后的,才能够笑到最后!
回答于 2019-09-11 08:43:50
定位错误最普遍的方式就是日志分析,姑且不谈是代码的运行环境(生产、测试、本地)。
这个问题可以暂时理解为通过日志定位错误有哪些技巧?
1、日志分类一定要做,分类的维度有很多种,登录型的,权限型的,业务型的,数据库操作的等等。
2、打印日志要完全,时间,类名,详细的错误堆栈信息,还可以加上一些关键参数值,因为错误有时候不一定是崩溃日志,也有可能是业务异常,这些关键参数值能给你分析业务带来有效的指引。
3、对于分布式系统可以考虑上ELK日志分析系统。ELK日志系统介绍:
ELK分别是Elasticsearch、Logstash、Kibana三个开源框架缩写。
Elasticsearch:开源分布式搜索引擎,提供存储、分析、搜索功能。特点:分布式、基于reasful风格、支持海量高并发的准实时搜索场景、稳定、可靠、快速、使用方便等。它可以接收搜集的海量结构化日志数据,并提供给kibana查询分析
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |