赞
踩
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
解决Bug是编程人员的天职(创造Bug算是一种天赋吧),甚至有人这么认为:开发人员的能力可以依据他能决解Bug的复杂程度来评定。简单的Bug大多数程序员是靠臆断来解决的,但是当Bug隐藏在代码的最深处,臆断不能够解决问题的时候,或许我们就得依靠些许技巧而不是重启。 1.打印输出,在关键位置用System.out.print(); 输出即时参数或者结果(事实上我更赞同用System.err.print(); 因为那样你的输出更明显),然后来判断程序的走向是否正确无疑简单快捷粗暴,程序新手也乐此不疲的使用打印来寻找Bug,但是这种方法缺陷是显而易见的:要求程序规模不能太大,因为你很难找到合适的地方,而且往往你也不知道打印出来的参数是什么意思;不适宜多线程环境下使用,你无法确定打印的顺序;要求程序运行最好是简单有序的,而且Bug是毕现的;线上程序出问题无法及时找到问题,必须在本地加上打印进行调试; 2.打印堆栈,通过在事发地点主动调用 new Exception().printStack(); 帮助程序员了解程序的走向。特别是当某个接口被广泛调用的时候:当程序出错,你希望找到错误的源头,那么你就可以通过打印错误堆栈来找到始作俑者。 3.臆断错误信息,通过系统打印的错误堆栈信息来推测错误原因并加以解决。好吧,这里我实在讽刺大多数不精明的程序员(同时也包括我自己)在看到错误信息后,迫不及待的享受解决Bug的快感,并不仔细查看堆栈信息,往往只解决了表面问题而忽略了更深层次问题。因为在这里受过的挫折太多了,我不得不举两个例子来加以警告: 情景i:《修仙》项目初期,玩家在进行某些位移操作时候服务器会报出空指针异常错误,于是我根据错误堆栈信息来到了事发地点,并且加上了判空操作并 以为解决了这个问题,事实上当回过头来仔细检查的时候发现这个错误是由于底层移动组件的报错引起的,也就是说如果没有检查,我仅仅把表面解决了等同于我吧错误隐藏的更深了,看起来表现没有错,但是底层在不停的进行错误的操作,谁也不知道最后会发生什么。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。