当前位置:首页 > 开发 > IT生活 > 正文

记一次工作中空指针故障的处理

发表于: 2014-02-27   作者:53873039oycg   来源:转载   浏览:
摘要:      今天上班的时候收到邮件,内容是我负责的代码报错了,时间很紧,必须今天内找出错误原因并修改,不能影响今天的业务数据,我一听马上想怎么可能,项目上线已经4个月了,运行这么久都没错,错误还得处理。     错误信息如下:     java.lang.NullPointerExceptio

     今天上班的时候收到邮件,内容是我负责的代码报错了,时间很紧,必须今天内找出错误原因并修改,不能影响今天的业务数据,我一听马上想怎么可能,项目上线已经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,结果是那条数据对应的信息上面明显的写着测试的字样,让我情何以堪,是上线时候测试数据没清空干净留下的。

 

     后面的处理也顺理成章了,(一)查询表看是否还有其他测试数据,(二)删除测试数据,其他的坐等明天结果,我相信我写的代码。

 

     这次找错非常侥幸,原因是(一)我能拿到生产数据,这是最重要的,如果仅凭错误信息,还是空指针,而且程序几个月没出错过,出错部分代码几个月没修改过,没有真实数据怎么找错呢?(二)是我的代码关系简单,没有被几个模块调用过,出错位置非常明确。

 

      结论是:关键还得看数据。

 

      最近有朋友问我上班不积极,上班时间写博客,我想回应下,我喜欢有感觉的时候马上把它写出来,上班时候我也会抽空写,不然我一下忘了,我更喜欢在问题被我解决时候写篇博文纪念下。第三,我上班的时候可以上网,公司没限制。

     全文完。

 

 

 

 

 

   

记一次工作中空指针故障的处理

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
用户报告前台业务响应缓慢,登陆至数据库获取awr报告。kill掉相关会话后系统恢复,杀会话可参考metal
用户报告前台业务响应缓慢,登陆至数据库获取awr报告。kill掉相关会话后系统恢复,杀会话可参考meta
1.某系统做数据库脚本升级后,发现job运行有错误,见下图: 2.进一步查看,发现系统sys用户下,有些
上周给客户数据库从Oralce 9.2.0.4升级到10.2.0.5之后,系统稳定运行。但昨天打电话给我说,数据库出
一次,在起用一个分支机构的网络时,将网络都连接好后,给局域网的各台 PC 都分配了一 IP 地址,然
问题来源 因为经常有各种各样的大小项目要跑,全部放一个tomcat很慢,所以俺平时喜欢新建80-89这10
原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。 深
2013年7月24日, 第一次来到深圳, 和两个同班兄弟一起。 那一天, 深圳,大雨。 2013年7月25日,
由戴不戴TT引发的思考 当你写下来烂代码时,就好像你约炮还不戴套,自己倒是爽了,别人呢!别人呢!
2009年12月9日这次培训是我的第二次比较正式的软件培训,相比第一次的培训,我感觉这次培训我成熟多
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号