解决Bug的思路分享
文章目录
如何解决Bug无论是编程初学者和优秀的程序员都面临Bug的难题,同时我在学习编程的成长过程中也被各种各样的Bug所苦恼,完成这篇文章的主要目的一是将自己过去的经验作一个总结,在下次遇到困难的时候能有更加清晰的思路,另外一点是,我把这些思路分享出来,或许可以让你得到一些启发。
什么是bug?bug的一次来源于哪里?
“Bug”的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。1947年9月9日,赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶条贴上飞蛾,并用“bug”来表示“一个在电脑程序里的错误”,“Bug”这个说法一直沿用到今天。
1.0 语法、语义、逻辑、内存Bug
1.语法错误
这一点对于小白程序员来说是最常见到的问题,不过语法问题一般编译器会有报错,比较好解决。
2.内容错误
曾经我遇到过这样一个问题,就是在写循环的时候把循环的次数本应是i结果写成了1当时苦恼的找了俩小时,甚至怀疑编译器有问题,找到之后才感到追悔莫及,感觉自己真笨。
3.逻辑bug
这部分是针对项目中类较多的时候容易出现的问题,因为类会不断的调用其他的类,很容易在中间过程中出现错误,例如在类中的方法通过返回值返回时,类型是否合适,或者方法中输入的数据是否符合规范。
4.溢出bug
这一点特别是在完成算法题的时候,例如循环语句等没有控制好循环的次数,或者是数组等问题,都很容易出现这种问题。
2.0 环境版本Bug
1.jar包bug
在写ssm项目的过程中容易遇到这个问题,不同版本的jar包对其他版本jar包的兼容是有限的,因此这一点需要十分注意。
2.导包Bug
特别是java中,一个类或许有很多个包供你选择,同时在这个过程中很多导包的语句同样也有版本问题,甚至语句很类似,这个过程中也会出现很多问题。
3.工具bug
这部分是我感触最深的bug,特别是搭建大数据集群的时候,新版本的集群环境就需要新的各项软件包,而老版本的就只能用旧版本软件包**,不能混着用,不然在后期会出现许多不兼容的问题**。
总而言之,以上就是我遇到过最多的问题,那么出现问题该如何解决呢?
3.0 Bug的解决(心理压制)
在很多时候,辛辛苦苦写了两天的代码,中间没有机会测试运行机会情况下,在最后运行过程中出现了问题,这种情况,换做谁都不会开心,遇到bug某种层面来说是好事,能帮助我们梳理代码逻辑,提升我们对代码分析的能力,but,那是在bug解决之后才会说的话,没有解决问题之前这就是一件十分揪心的事情,很多时候,我面对这样的问题也是气急败坏!
时间长了,我也在bug中慢慢成长,变的不那么急躁,因为仔细想想,人非圣贤,孰能无过,更何况上千行代码,一直写下去,不出错也不太正常,同时在解决在解决很多的问题之后,回头想想,其实自己从来没有因为一个bug而放弃继续学习,到最后不都解决了吗,怕什么!同时我一直推崇的一句话是,bug肯定是能解决的只不过是时间问题。
如果能做到这样的心理压制,给自己足够的信心和勇气,那么接下来面临的问题就是用什么样的方式解决这个bug呢?
4.0 Bug的解决方式(方法压制)
4.1查询
这个不必多说,同时也是最简单有效的方式,很多bug在网上已经有了成熟的解决思路。
但是如果查不到,或者压根没有任何提示和报错,这个方法自然行不通!
4.2猜想推断
我所说的猜想是在一定范围内的猜想,是依据自己对代码的运行流程理解情况下的猜想,是否是版本问题?是否是配置问题?或许是导包问题?但这些都依据项目本身的实际情况推断!
如果经过尝试发现版本这些都没有任何问题,那么就需要对代码逻辑内容进行分析了!
4.3二分法
或许这个说明有些不标准,但主要想表达的内容是缩小bug的范围,特别是在面对一个大项目的时候,分析的时候就必须缩小问题的范围,不可能像初学编程的时候,和别人的代码逐个单词比对。
如何进行二分法呢?这又是一个问题,不可能瞪着眼看啊!
4.4输出法
当代码量较多的时候,按照运行流程,可以对一些关键节点产生的数据进行输出,如过输出内容符合预期,那么说明前面的内容应该没有什么问题。
如果,你只是在埋头抄代码,不理解代码运行流程那该怎么办?
4.5debug
这个方法也是程序员必须要掌握的内容,debug不仅可以帮助我们找bug,更多的是可以让我们可以通过打断点的方式,逐行了解代码的运行流程,这样我们便知道了,这个项目的运行逻辑,从而可以更好的使用输出法进行确定。
如果经过debug都没有找到问题所在,那么可能就是自己的问题了!
此时,就需要分析,我对代码的编写流程是否理解,我对编程语言是否了解深入,总而言之,找bug的快慢和你对编程语言本身的理解和对项目业务流程的熟悉程度有着莫大的关系!如果是本身自己的问题,那么就应该多分析代码的编写过程和深入分析业务流程这两个重要问题!
5.0总结
遇见bug就像是遇到人生中的一道道坎,无论是大坎还是小坎都应该鼓足勇气去面对,使用正确的方法去解决,解决问题的过程也是自己编码能力成长的过程,每一次问题的解决都是对自己的认可,给了自己下一次战胜bug的决心!
以上内容仅为个人在学习过程中的感悟和总结,如果你有更好的idea可以在评论区留下你的宝贵见解!