java程序报错后的排错思路

  目前总结出来三个字:看日志! 而且是从左到右一个单词一个单词的看。


  举个例子:
  Spring框架下的一个Demo,启动时报出了以下错误。
在这里插入图片描述


一、看异常类型
在这里插入图片描述
  首先,能看到异常是从引入的SpringFramework依赖中报出来的,具体的路径在黑框中,可以看到关键类“beans”、“factory”、“xml”以及异常类“XmlBeanDefinitionStoreException”。
  从关键字可以大致推测,问题是在Bean工厂获取Bean对象前后这个时间段出现的,并且获取Bean对象的方式和xml配置文件有关。具体的异常类型是“XmlBeanDefinitionStoreException”,直接翻译过来的意思是:Xml Bean定义存储异常。问题范围就缩小到在xml中定义bean的方式有问题了。
  仅仅是黑框中的异常类路径,就暴露了这么多的信息,所以排错时看日志至关重要。


二、看具详细误信息
在这里插入图片描述

Line 21 in XML document from class path resource [beanFirst.xml] is invalid; nested exception is org.xml.sax.SAXParseException;
lineNumber: 21;
columnNumber: 74;
cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘c:bean’ 的声明。

  在[beanFirst.xml]这个配置文件中的第21行出错了,这个详细错误信息是SAXParseException异常类告诉我们的,SAX(针对XML的简单API)是基于事件为XML文档的解析器,那么定义错误已经精准定位到beanFirst.xml的第21行了,后面又提示“通配符的匹配很全面, 但无法找到元素 ‘c:bean’ 的声明。” “通配符匹配的很全面”是说,我们在xml中有关通配符的写法没有问题,全都匹配上了。
在这里插入图片描述

  问题出在元素“c:bean”的声明上,没有这个元素的定义。
在这里插入图片描述

  我们看到“bean”标签是“beans”下的一个子标签;“c:”是引入了一个Spring自定义的xml依赖,命名空间依赖是全的。而且IDEA没有帮我们排查出错误,这个元素下没有红线、错误提示信息。
  回顾第一步,错误类型说明是bean的定义方式不正确,所以推测"c:bean"这种写法不符合规范。


  详细错误信息是谁提供给我们的呢?
  Application类中test02方法的执行产生了异常对象,第一行是产生异常对象的类,后面的类通过throws关键字将异常对象一层层抛上来。实际上是通过递归的方式。
在这里插入图片描述
点开第一个类,找到指定的行数,可以看到异常对象被实例化了出来。
在这里插入图片描述


三、具体问题具体分析
  到这一步问题已经锁定了,很多情况下锁定问题是很困难的,但是只要锁定了问题,解决问题就有针对性,只差解决问题的方案。
  很多人用尝试代替学习,一遇到问题就借助搜索引擎,尝试几种方法后蒙对一次就算解决了,下次遇到类似问题,依然像第一次解决这类问题一样来回尝试。所以总结排错方法很重要,下次面对相似错误的变形,我们依然可以通过上面那套思路锁定问题,大大节省效率。靠尝试代替学习的人工作效率低,靠加班解决问题,岁数大了以后加不动班,或者靠加班也解决不了问题。加班不是努力的表现,过去我也经常加班,从现在起不想再加班了,为此我要优化我的工作方法,以后还会继续做总结,希望大家新的一年都有进步。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏诗曼CharmaineXia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值