今天上班的时候收到邮件,内容是我负责的代码报错了,时间很紧,必须今天内找出错误原因并修改,不能影响今天的业务数据,我一听马上想怎么可能,项目上线已经4个月了,运行这么久都没错,错误还得处理。
错误信息如下:
java.lang.NullPointerException at com.xxx.saveXXX(XXXDAOImpl.java:20)
典型的空指针,首先找到第20行,第20行是一个save方法,没看出问题,往上面看,只有几个set方法,也没看出问题,而且上面的几个属性除了主键大部分是可以接收null值的,业务需要不同的操作有不同的字段对应,有些业务只需要也只能记录到几个属性。
没办法,在eclipse里面选择方法名按Ctrl+Alt+H得到方法调用关系,最终在Service里面找到最初的调用方法,一开始我百分百以为自己的代码出问题了,这玩意出问题了后果很严重,先把代码从service到dao看了一遍又一遍,一无所获,心里很失落。
看代码没看出问题,只好模拟下,希望能找出错误原因,好在数据库里面有测试数据,先那点测试数据跑下,在出错位置打上断点,debug运行,第一次取了10条,一跑没错,查看数据库确实跑成功了,以为是数据太少,第二次取了200条,在出错位置打印对象信息,run运行,一下跑成功了,看数据库确实是成功了,难道是人品不行。
代码也看了,也运行了,就是找不到错误原因,这感觉,中午休息了下,下午继续找原因,一开始我怀疑有人修改过我的代码,这不是我第一反应想到的,我第一反应是:"糟了,代码出错了,要马上找到bug位置",查看svn提交信息,上面只有我的名字,按邮件说错误是昨天凌晨时候发生的,以前没错误,只好出绝招了,去生产数据库查询前天0点开始到前天12点的数据,为什么呢?我写的是一个今天处理昨天数据的功能,错误是昨天时候发生的,所以只需要查看前天的数据,按出错时间估计,任务最多只处理一半,只需要一半的数据。
把数据从生产取到本地,我做的工作是,(一)修改代码,在出错位置增加打印信息,(二)把取数据的逻辑修改成支持按时间段取数据。这样我从0时开始,一个小时取一次数据处理。(三)在service方法内用try,catch捕获异常,以前是直接抛出的,等上面代码处理的,我这样做只是想快点找到出错原因,另一方面是我的serice是提供给别人的,我的测试方法只能写在service里面,还是使用main方法测试的,原因是我想快点运行,看过我以前的博客的朋友也许知道,我电脑上的junit run方法半天没反应。
这样我从0点到1点,运行正常,1点到2点时间段运行正常,3点到4点时间段出错了,在出错信息上面,我成功得到了对象的id以及其他信息。 到生产数据库一查询,结果让我非常激动,QTDYD,结果是那条数据对应的信息上面明显的写着测试的字样,让我情何以堪,是上线时候测试数据没清空干净留下的。
后面的处理也顺理成章了,(一)查询表看是否还有其他测试数据,(二)删除测试数据,其他的坐等明天结果,我相信我写的代码。
这次找错非常侥幸,原因是(一)我能拿到生产数据,这是最重要的,如果仅凭错误信息,还是空指针,而且程序几个月没出错过,出错部分代码几个月没修改过,没有真实数据怎么找错呢?(二)是我的代码关系简单,没有被几个模块调用过,出错位置非常明确。
结论是:关键还得看数据。
最近有朋友问我上班不积极,上班时间写博客,我想回应下,我喜欢有感觉的时候马上把它写出来,上班时候我也会抽空写,不然我一下忘了,我更喜欢在问题被我解决时候写篇博文纪念下。第三,我上班的时候可以上网,公司没限制。
全文完。
相关推荐
该文介绍了一种针对空指针引用故障的静态分析方法,将空指针引用问题抽象为一类故障模型,并以故障模式状态机来形式化描述此类故障模型,然后根据故障状态机的创建条件及待检测代码的语义信息确定是否创建该类型的...
在无线通信领域,MIMO(Multiple-Input Multiple-Output)技术是一种重要的传输策略,它通过利用空间多样性和信号处理技术来提升系统的数据速率和可靠性。本篇将详细讲解MIMO通信系统中的空时编码处理,并结合MATLAB...
针对一般轧制工艺生产的中空锚杆,出现的锚杆性能参差不齐、质量差,易造成锚杆失效和巷道失稳等问题,采用控温轧制的方法,以材质为Q345的D25中空锚杆体为例,利用感应加热控温轧制技术,将3种不同温度下的锚杆力学性能...
在C语言中,空指针、空指针常量、NULL和0是程序设计中非常重要的概念,它们在处理指针时起到关键的作用。本文将深入解析这些概念及其相互关系。 首先,空指针常量(null pointer constant)是指那些在数值上等于0或...
中空玻璃抽样规则是质量控制和质量保证的一种重要手段,对于中空玻璃的生产和使用具有重要意义。以下是中空玻璃抽样规则的详细知识点解释: 抽样规则的目的 抽样规则的目的在于确保中空玻璃的质量达到一定的标准,...
资源名:mimo通信系统中空时编码处理_matlab仿真代码_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群...
提高中空混凝土外墙一次成型合格率
mimo通信系统中空时编码处理书中所附的matlab仿真代码,供大家学习-mimo.rar
在这个案例中,`24_mimo通信系统中空时编码处理案例`可能包含了MATLAB代码文件,用于演示上述步骤的实现。通过运行这些代码,用户可以直观地理解MIMO系统的工作原理,同时对空时编码的设计和优化有更深入的认识。 ...
本文将深入探讨HONTKO中空型编码器的原理、特点、应用以及其在实际工作中的优势。 一、编码器概述 编码器是一种将物理位置或运动转化为电信号的设备,这些信号可以被计算机或其他控制系统解析并用于精确控制。根据...
【提高中空混凝土外墙一次成型合格率】是一个重要的建筑施工课题,主要针对南京江北金茂悦项目,该项目采用“PC+铝模”建造方式,预制装配率高达51%,具有创新性和挑战性。在设计阶段,为了减轻墙体重量,外墙内嵌了...
在提供的压缩包文件中,包含了详细的Matlab代码,这些代码很可能涵盖了以上提到的各个环节,通过运行这些代码,我们可以深入理解MIMO通信系统中空时编码的工作原理,并且可以对不同参数下的系统性能进行直观的观察和...
这里告诉我们:0、0L、’\0’、3 – 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (tyc: 我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*)
在现代工业设计中,中空旋转平台作为一种重要的机械设备组件,广泛应用于各种自动化设备、机器人系统以及精密测量等领域。这类平台的设计往往需要精确的外形参数,以便确保其在运行时的稳定性和精度。本篇文章将详细...
标题中的“电子-一种电动中空百叶玻璃”暗示了我们即将探讨的是一个与电子技术相关的创新产品,即电动中空百叶玻璃。这种产品融合了电子技术、建筑材料和能源管理等多个领域的知识。 首先,我们要了解什么是电动...
标题中的“中空圆柱体”是指一个内部为空心结构的圆柱形物体,这种几何形状在许多领域,特别是物理学和工程学中都有广泛应用。在本案例中,它被描述为一个实体对象,用于演示三维声流体耦合现象。 三维声流体耦合...
行业资料-交通装置-一种中空走线的机电一体化关节.zip
《中空轻质隔墙条板一次成型模》 在建筑行业中,中空轻质隔墙条板是一种广泛应用的墙体材料,它具有重量轻、隔热隔音性能好、施工速度快等优点。一次成型模技术则是生产这种隔墙条板的关键设备,这种技术能够有效地...