java程序报错后的排错思路

news2024/11/24 12:05:11

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


  举个例子:
  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关键字将异常对象一层层抛上来。实际上是通过递归的方式。
在这里插入图片描述
点开第一个类,找到指定的行数,可以看到异常对象被实例化了出来。
在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[数据结构基础]排序算法第三弹 -- 快速排序

目录 一. 快速排序的基本思想 二. 快速排序的递归实现 2.1 单趟快速排序的实现 2.1.1 Hoare法实现单趟快排 2.1.2 挖坑法实现单趟快排 2.1.3 前后指针法实现单趟快排 2.2 递归快排的整体实现 三. 快速排序的时间复杂度分析 四. 快速排序的非递归实现 4.1 快速排序非递…

Promise详解与手写实现

Promise详解与手写实现Promise1、Promise介绍与基本使用1.1 Promise概述1.2 Promise的作用1.3 Promise的使用2、Promise API3、Promise关键问题4、Promise自定义封装5、async与await5.1. mdn文档5.2.async函数5.3.await表达式5.4.注意Promise 1、Promise介绍与基本使用 1.1 P…

电商维权,维权方法汇总【超全】

电商维权,就是维护线上渠道中自己的合法权益,其中包括消费者维权、品牌方维权、卖家维权。今天,我们来聊一聊消费者维权。 1、 维权类型 消费者在网购过程中难免遇到各种问题,主要就是产品质量问题、产品价格问题、产品售后问题、…

JavaWeb-VUEElement

JavaWeb-VUE&Element 1,VUE 1.1 概述 Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。 Mybatis 是用来简化 jdbc 代码编写的;而 VUE 是前端的框架,是用来简化 JavaScript 代码编写的。前一天我们…

PID控制的方波响应

被控对象为一延迟对象:采样时间为20s,延迟时间为4个采样时间,即 80s,被控对象离散化为:y(k) -den(2)y(k- 1)num(2)u(k - 5)由于方波信号的速度、加速度不连续,当位置跟踪指令为方波信号时,如采用…

C++ 树进阶系列之树状数组的树形之路

1. 前言 树状数组也称二叉索引树,由Peter M. Fenwick于1994发明,也可称为Fenwick树。 树状数组的设计非常精巧,多用于求解数列的前缀和、区间和等问题,为区间类型问题提供了模板式解决方案。 数状数组简单易用,但对…

【100个 Unity实用技能】 | 修改Unity UI控件中默认字体配置

Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…

【C++提高编程1】一文带你吃透函数模板和类模板(附测试用例源码、测试结果图及注释)

📝我的个人主页 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊✉️今天你做别人不想做的事&…

域内权限维持:注入SSP

01、简介 SSP(Security Support Provider)是Windows操作系统安全机制的提供者。简单地说,SSP是个DLL文件,主要用来实现Windows操作系统的身份认证功能。在系统启动时,SSP 将被加载到lsass.exe进程中,攻击者通过自定义恶意的DLL文件…

解决ModuleNotFoundError: No module named ‘torch.fx‘

运行yolo v5 train python train.py 报错 ModuleNotFoundError: No module named ‘torch.fx’ torch版本不匹配 目前版本torchu1.7 #卸载pytorch pip uninstall torch 再安装 python -m pip install torch -i https://mirrors.aliyun.com/pypi/simple/ python -m pip是…

本周大新闻|Quest Pro降价至1099美元,传苹果AIGC或用于XR内容生成

本周大新闻正值春节假期,因此包含近两周(1月16-1月29日)的AR/VR新闻汇总。关于2022,近期我们发布了2022年AR/VR行业融资报告、2022年AR硬件总结、2022年VR硬件总结。AR方面,最新消息称苹果AIGC曝光,或用Sir…

通信数据中心供电系统故障影响区域分析定位

(华北石油通信有限公司)摘要:供电系统对于通信机房而言至关重要,一旦供电系统发生严重故障,需要快速制定出应急预案,使故障影响可控。本文提供一种对机房供电系统故障影响区域快速定位方法。该方法的实现思…

可观察性和安全性融合的紧迫性越来越高

根据一份新报告,融合可观察性和安全性的紧迫性越来越大。 软件情报公司 Dynatrace 公布了一项针对大型组织的 1,300 名 CIO 和高级 DevOps 经理(包括来自澳大利亚的 100 名)进行的独立全球调查的结果。 调查结果表明,随着对连…

OS 学习笔记(3) 操作系统的发展与分类

OS 学习笔记(3) 操作系统的发展与分类 这篇笔记对应的王道考研 1.2 操作系统的发展与分类,同时参考了 《Operating System Concepts, Ninth Edition》和 《 Operating Systems: Three Easy Pieces》(俗称ostep) 文章目录OS 学习笔记(3) 操作系…

【数据结构】堆的应用——TOP-K问题详解

目录 🍎前言🍎: 🥝一、TOP-K 问题概述🥝: 🍉二、不同解决思路实现🍉: ①排序法: ②直接建堆法: ③K 堆法(最优解)&a…

Redis简单入门

Redis简介 Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的NoSQL数据库。特点如下: 读写速度快:Redis官网测试读写能到10万左右每秒。速度快的原因这里简单说一下,第一是因为数据存储在内存中,我们知…

标准有效的项目开发流程

代码版本管理在项目中,代码的版本管理非常重要。每个需求版本的代码开发在版本控制里都应该经过以下几个步骤。在master分支中拉取该需求版本的两个分支,一个feature分支,一个release分支;feature分支用于接受个人分支merge过来的…

二叉树DFS、BFS

目录 1,DFS遍历 2,DFS遍历OJ实战 力扣 144. 二叉树的前序遍历 力扣 94. 二叉树的中序遍历 力扣 145. 二叉树的后序遍历 力扣 105. 从前序与中序遍历序列构造二叉树 力扣 106. 从中序与后序遍历序列构造二叉树 力扣 889. 根据前序和后序遍历构造二…

C++中的new、operator new与placement new

new operator 当我们使用了new关键字去创建一个对象时,你知道背后做了哪些事情吗? A* a new A;实际上这样简单的一行语句, 背后做了以下三件事情: 分配内存,如果类A重载了operator new,那么将调用A::operator new(…

TencentOS安装并运行多版本php

TencentOS版本3.1安装并运行php7,现在需要同时运行一个php8. php选择使用了php v8.0.27 采用编译安装的方式,编译命令如下: ./configure --prefix/application/php8 --with-config-file-path/application/php8/etc --with-mhash --with-o…