你是否有过这些经历:
1.代码敲完了,刚想松口气,一运行程序,满满的Bug。
2.找啊找啊找,怎么找都找不到哪里出了问题。
3.调试了半天出不来,就开始便得心烦气躁。
4.一天连一个Bug也没调出来,工作效率低,心情抑郁。
5.想着有人可以告诉它如何改善现状,提高工作效率
……
如果你有些经历,那么请接着往下看,虽然不能保证完全解决您现在所面临的问题,但是也可以让你工作起来轻松一些。
对于我们调试效率低的这种情况,我们想要提高工作效率,就需要缩短调试的时间,即要快速调试,要想真正学会快速调试,我们需要做到以下四步骤:冷静,学会看异常信息,分析异常,总结。
第一步:保持冷静
这是我们调试时最为需要的,调整好心态是我们做好每一件事情的开端。
错误的做法:一遇到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进行赋值:
public RolefindRoleById(Long roleId) {
baseDao.setEntityClass(Role.class);
returnbaseDao.get(roleId);
}
再次执行,成功无异常,该Bug解决。
第四步:总结
这一步很重要,不仅对我们以后的调试效率会有大大的提高,而且还可以避免我们再次遇到类似的Bug,这就是所谓的项目经验。
我们对异常出现的情况进行分类汇总,一是在下次编码的时候避免犯类似错误,二是让我们遇到异常时可以不看异常信息就知道原因,比如针对上面的例子,一看报了空指针的异常,那么我们不看信息也可以确定不是roleId异常就是baseDao相关异常,进而再通过分析和测试进行排除。
愚蠢的人是一遍又一遍地犯同样的错,而聪明的人则会通过总结和借鉴来避免犯类似的错误进而可以提高。
上面这些步骤是我们平时积累的方法,“工欲善其事必先利其器”,一个好的方法才能帮助我们去更好的提高和成长。
如果你积累的比较多之后可以回答一下下面这个问题,是一个面试题:一个网页运行的很慢,如何快速地解决该问题?从哪些方面入手呢?大家踊跃发言哈!
分享到:
相关推荐
[12]优秀程序员之路——C++开发经验及技巧大汇总.zip上位机开发VC串口学习资料源码下载[12]优秀程序员之路——C++开发经验及技巧大汇总.zip上位机开发VC串口学习资料源码下载[12]优秀程序员之路——C++开发经验及...
在这个“优秀程序员之路——ASP.NET开发经验及技巧大汇总”中,我们将深入探讨ASP.NET的核心概念、开发实践以及各种实用技巧,帮助你提升编程技能,成为一名出色的开发者。 首先,ASP.NET的基础知识是必不可少的。...
"优秀程序员之路——Java开发经验及技巧大汇总"这个压缩包文件,显然是一份宝贵的资源,旨在帮助开发者提升Java编程技能,理解核心概念,并掌握实际开发中的最佳实践。 首先,我们来探讨Java开发的基本知识点: 1....
标题《优秀程序员之路——C开发经验及技巧大汇总》指的是向程序员介绍和总结在C语言开发过程中积累的经验和技巧。C语言作为编程界经典的语言之一,对于初学者和资深程序员都有着重要的学习价值。描述部分罗列了文章...
C~C++程序员实用大全——C~C++最佳编程指南.pdf(3)
程序员之路——一个老程序员对刚上大学的学弟学妹的忠告.
C~C++程序员实用大全——C~C++最佳编程指南
《程序员面试宝典——经典》是一本专门为准备进入IT行业或者寻求职业晋升的程序员量身打造的面试指南。这本书深入浅出地解析了面试中常见的技术问题和面试技巧,旨在帮助读者更好地理解和应对面试挑战。以下是一些...
"程序员实用算法——sourceCode"这个主题涵盖了各种在实际开发中经常遇到的算法,通过源代码的形式来展示这些算法的实现。下面将详细介绍一些重要的算法类型及其应用。 1. 排序算法:包括快速排序、归并排序、冒泡...
总之,《程序员的羊皮书——程序员必备》涵盖了程序员在技术、职业和个人发展上的诸多方面,提醒我们,成为一名优秀的程序员不仅仅是编写代码,更重要的是全面发展自己的技能,适应快速变化的IT行业。通过不断学习和...
C~C++程序员实用大全——C~C++最佳编程指南
C~C++程序员实用大全——C~C++最佳编程指南
C~C++程序员实用大全——C~C++最佳编程指南.part5
C~C++程序员实用大全——C~C++最佳编程指南.part6.rar
书中还可能包含调试技巧、代码审查原则以及良好的编程习惯,这些都是成为优秀C/C++程序员不可或缺的部分。 最后,书中很可能会涵盖一些高级主题,如设计模式、软件架构、测试驱动开发(TDD)、重构等,这些都是提高...
程序员小飞解密——纯新手的我,到底该把宝押在python2还是python3??
《C~C++程序员实用大全——C~C++最佳编程指南》是一本为C和C++程序员量身定制的综合教程,旨在提供全面且深入的编程指导。这本书涵盖了C和C++的基础到高级主题,是提升技能和深入理解这两种语言精髓的重要资源。 ...