今天上班的时候收到邮件,内容是我负责的代码报错了,时间很紧,必须今天内找出错误原因并修改,不能影响今天的业务数据,我一听马上想怎么可能,项目上线已经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,结果是那条数据对应的信息上面明显的写着测试的字样,让我情何以堪,是上线时候测试数据没清空干净留下的。
后面的处理也顺理成章了,(一)查询表看是否还有其他测试数据,(二)删除测试数据,其他的坐等明天结果,我相信我写的代码。
这次找错非常侥幸,原因是(一)我能拿到生产数据,这是最重要的,如果仅凭错误信息,还是空指针,而且程序几个月没出错过,出错部分代码几个月没修改过,没有真实数据怎么找错呢?(二)是我的代码关系简单,没有被几个模块调用过,出错位置非常明确。
结论是:关键还得看数据。
最近有朋友问我上班不积极,上班时间写博客,我想回应下,我喜欢有感觉的时候马上把它写出来,上班时候我也会抽空写,不然我一下忘了,我更喜欢在问题被我解决时候写篇博文纪念下。第三,我上班的时候可以上网,公司没限制。
全文完。
相关推荐
本篇文章是对C语言中空指针、空指针常量、NULL & 0 进行了详细的分析介绍,需要的朋友参考下
该文介绍了一种针对空指针引用故障的静态分析方法,将空指针引用问题抽象为一类故障模型,并以故障模式状态机来形式化描述此类故障模型,然后根据故障状态机的创建条件及待检测代码的语义信息确定是否创建该类型的...
mimo通信系统中空时编码处理matlab仿真试验.rar
matlab通信仿真:24 mimo通信系统中空时编码处理案例.zip
基于matlab实现的mimo通信系统中空时编码处理案例-源码.zip
针对一般轧制工艺生产的中空锚杆,出现的锚杆性能参差不齐、质量差,易造成锚杆失效和巷道失稳等问题,采用控温轧制的方法,以材质为Q345的D25中空锚杆体为例,利用感应加热控温轧制技术,将3种不同温度下的锚杆力学性能...
资源名:mimo通信系统中空时编码处理_matlab仿真代码_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群...
提高中空混凝土外墙一次成型合格率
mimo通信系统中空时编码处理书中所附的matlab仿真代码,供大家学习-mimo.rar
这里告诉我们:0、0L、’\0’、3 – 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (tyc: 我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*)
行业资料-交通装置-一种中空走线的机电一体化关节.zip
本工程在深化铝模图纸时,将外围护一圈的二次结构及门洞口的过梁、短肢墙全部深化为一次结构,设计验算后发现荷载超限,要求在外墙中添加EPS板以减轻墙体重量。 1.3 施工难点 设计要求在200mm厚的外墙中放置100mm厚...
为研究中空率对轴压中空GFRP管钢筋混凝土柱力学性能的影响,对不同中空率条件下的构件进行轴心抗压试验,并应用ANSYS软件,建立有限元模型进行仿真模拟,对得到的载荷-应变曲线和极限承载力进行分析.结果表明:随着中空率...
此模型提供与实体对象耦合的三维声流体现象的常规演示,在此研究中,实体对象是一个加盖的、装满水且浸在水中的中空铝气缸。
HONTKO中空型编码器rar,HONTKO中空型编码器
中空玻璃的抽样规则.doc
中空微球的制备及其应用,梅啸,李娜君,中空微球是粒径为纳米到微米级的一种具有核-壳特殊结构、核心中空而壳上布满孔道的新型材料。这种材料具有粒径小、比表面积大、�
行业分类-电子-一种电动中空百叶玻璃
中空氧化锌微球的碳模板法制备及其性能测试,岑远,胡军,中空氧化锌微球因为它的低密度,大比表面以及出色的表面渗透性,所以备受关注。由于中空氧化锌的种种性质所以经常被用于各种方面