调试,是一门艺术

调试,是一门艺术

       刚刚进入公司,工作了一个月,被分到一个项目组,由于项目已经开始了很长时间,当自己加入时,已经是快要进入UT阶段了;又由于自己是新人,项目经理,就给我和另外一个新来的哥们分配了一个模块,对一个从Android平台“借”过来的代码,进行调试,和修改。由于这个项目是和Win8平板相关的,而我们负责的模块是从Android平台“借”过来的,主要的任务是将代码处理成在Win8下兼容的,模块主要是用C++完成,功能是对底层提供的字体,符号在平板上进行正确的显示,如果不能正确显示,则要进行兼容性调试,修改代码,完成完美显示。

        对这个模块调试了一个月,修改了很多的BUG,自己也有一些新的,所以写这篇文章和大家分享,如有哪里写的不是很好,或者不正确,希望大家提出宝贵的意见!!!

       当项目经理将模块和框架交给我们的时候,对于模块,并没有任何的文档,而且代码中没有任何注释,自己的第一感觉就是这个代码就是一坨“屎”;真的很烂,由于是新人,所以就不得不硬着头皮做了。

        一:做任何事情,一定要“平常心”

        是的,做任何事情,都要有一颗“平常心”,虽做不到不以物喜,不以己悲,但也要做到淡定。对于“屎”一样的代码,一定要找到模块的入口,进行整体了解,对每个函数的功能做到心中有数,并写出文档记录;

       二:单步跟进,各个突破

       当对每个函数的功能,参数都了解了之后,便可开始了第二步,单步跟进,特别是对于没有文档的代码,一定要搞清楚代码之间的联系,谁调用谁,谁是谁的父类,子类;画出流程图,做出相关文档;

       三:调试的开始,开始干掉你的第一个BUG

       之前的准备工作都是为了能最终能轻松的干掉BUG,找到BUG,首先不要急着去改代码,一定要多想,多分析,确定出现BUG的原因,当分析好了,便开始定位BUG在程序中位置,设置断点,跟踪变量,查看变量的变化,再次分析,最后,干掉BUG;

       四:排除一切外在干扰

       有的时候,BUG,并不是本模块引起的;有一次,跟踪一个BUG,跟了两个多小时,一直想不通;最后,去问师兄,才发现是在绘制图片的clip区域的时候,将绘制的字体遮盖住了,可见,这本身不是字体模块的BUG,而是图片绘制模块的BUG,所以,在调试的时候,完全可以将图片的绘制屏蔽掉,而单单查看字体的绘制,这样就可以减去其它的干扰,让调试变的轻松;

        五:防止牵一发而动全身;

        由于函数之间的调用,很可能会出现这种状况,修改掉这个BUG,而出现一个新的BUG;这种情况并不是我们希望的,我们不能说,为了改掉这个BUG,而引入一个新的BUG;如果是这样的引入一个新的BUG,其实,身后的BUG更多,所以,在修改的时候,一定要考虑清楚,自己的修改,带来的后果是什么?绝对不能引入新的BUG;

        六:对BUG归类

        BUG,是无尽的,你是改不完的;所以,应该对发现的,改的代码进行归类;当再次发现这个BUG的时候,可以很轻松的干掉它;

       七:最后,调试,是一门艺术;而不是体力活;调试的时候,想的越多,将收获的越多。在调试的时候,并不能学到多少新的知识,但是能对现有知识的进行巩固,让自己的知识进行更好的应用;调试,是每一个程序员武器库里必备的。

        希望大家在这条路上走的更好!!!也在鼓励自己!!!

         2012/8/10于大连 宿舍

 

你可能感兴趣的:(框架,android,工作,文档,任务,平台)