我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 3520|回复: 5

[技术文章] 优秀程序员必备素质——快速调试

[复制链接]

该用户从未签到

1万

主题

1424

回帖

3万

积分

管理员

积分
32023

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2012-6-11 22:50:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
你是否有过这些经历:
1.代码敲完了,刚想松口气,一运行程序,满满的Bug。
2.找啊找啊找,怎么找都找不到哪里出了问题。
3.调试了半天出不来,就开始便得心烦气躁。
4.一天连一个Bug也没调出来,工作效率低,心情抑郁。
5.想着有人可以告诉它如何改善现状,提高工作效率
……
1338731497_8720.jpg

   如果你有些经历,那么请接着往下看,虽然不能保证完全解决您现在所面临的问题,但是也可以让你工作起来轻松一些。

   对于我们调试效率低的这种情况,我们想要提高工作效率,就需要缩短调试的时间,即要快速调试,要想真正学会快速调试,我们需要做到以下四步骤:冷静,学会看异常信息,分析异常,总结。

  第一步:保持冷静
   这是我们调试时最为需要的,调整好心态是我们做好每一件事情的开端。

  错误的做法:一遇到Bug就心浮气躁,觉得Bug很讨厌,心烦,于是心不甘情不愿的开始了调试。

  正确的做法:先冷静,然后想我们能够遇到Bug就说明我们写的代码还不够完美,还有可以改进的空间,还在我们的掌控范围之内(不至于等产品发布后再出现Bug挨老板骂),这是好事儿,这样想着想着我们的心情也就跟着好了,给我们调试带来了好的开头。

  第二步:学会看异常信息
   静下心来后,我们就开始看程序给我们所抛出的异常,一般情况下,通过异常信息我们可以确定抛异常的位置和抛异常原因,比如我们以下面这个异常为例,这个是我们经常会碰到的异常,我们先来看异常信息:

   我们先看上面异常信息中的异常描述:“java.lang.NullPointerException”,空指针异常,说明是程序中某处出现了空指针导致的;

   接着我们看打印出异常的堆栈信息,有些或许看不懂没关系,我们只看我们自己代码部分即可,其中用红色框标出的几行代码即为本次异常执行时所经过的几个类和方法,在这里我们确定了是在根据用户id查找用户时出现的异常。

   注:程序打印的异常信息都是堆栈信息,即它的打印顺序跟我们程序的执行顺序是相反的,比如上面例子中的根据用户id查找用户方法,应该是先执行RoleManagerImp,然后是RoleDaoImpl,最后是BaseDao,可是打印顺序确实BaseDao——RoleDaoImpl——RoleManagerImpl,要会看这些信息。

  第三步:分析异常
   该步骤是缩短调试时间的关键。确定了异常的几个位置后(目前可能出现Bug的位置有四个,RoleManagerAction,RoleManagerImpl,RoleDaoImpl和BaseDao都有可能),我们再来进一步分析Bug出现的原因和精确其所在位置。

   由于异常往往是在最后执行时才会抛出的,所以我们从后面Dao层入手,我们先查看BaseDao的get方法,可以发现其指定调用HibernateTemplate时有两个参数:entityClass和id,而RoleDaoImpl只传进去了一个id,并且baseDao的entityClass没有赋值,故而会有空指针。

   当然我们只是猜测,现在来验证一下,在RoleDaoImpl中为baseDao的entityClass进行赋值:[blockquote]
public RolefindRoleById(Long roleId) {baseDao.setEntityClass(Role.class);

returnbaseDao.get(roleId);
}[/blockquote]
   再次执行,成功无异常,该Bug解决。

  第四步:总结
   这一步很重要,不仅对我们以后的调试效率会有大大的提高,而且还可以避免我们再次遇到类似的Bug,这就是所谓的项目经验。

   我们对异常出现的情况进行分类汇总,一是在下次编码的时候避免犯类似错误,二是让我们遇到异常时可以不看异常信息就知道原因,比如针对上面的例子,一看报了空指针的异常,那么我们不看信息也可以确定不是roleId异常就是baseDao相关异常,进而再通过分析和测试进行排除。

   愚蠢的人是一遍又一遍地犯同样的错,而聪明的人则会通过总结和借鉴来避免犯类似的错误进而可以提高。

   上面这些步骤是我们平时积累的方法,“工欲善其事必先利其器”,一个好的方法才能帮助我们去更好的提高和成长。

   如果你积累的比较多之后可以回答一下下面这个问题,是一个面试题:一个网页运行的很慢,如何快速地解决该问题?从哪些方面入手呢?大家踊跃发言哈!
回复

使用道具 举报

该用户从未签到

2

主题

99

回帖

22

积分

二级逆天

积分
22

社区居民终身成就奖

QQ
发表于 2012-7-2 00:18:05 | 显示全部楼层
回复

使用道具 举报

头像被屏蔽

该用户从未签到

0

主题

5

回帖

0

积分

禁止发言

积分
0

社区居民

QQ
发表于 2012-7-21 10:45:15 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

0

主题

690

回帖

0

积分

二级逆天

积分
0

终身成就奖

QQ
发表于 2019-7-10 08:47:00 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

18

主题

1627

回帖

760

积分

二级逆天

积分
760

终身成就奖

QQ
发表于 2019-7-12 08:52:37 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

8

主题

2158

回帖

0

积分

二级逆天

积分
0

社区居民终身成就奖

QQ
发表于 2019-8-5 08:28:07 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

每日签到,有金币领取。


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表