定位bug技巧

潦草总结,有待进一步完善.


自己开始工作,在工作中遇到了很多bug。

      总结定位bug步骤如下:

1、观察现象,通过现象分析出可能出问题的几个模块或者一个

   因为bug有时候不是因为单一模块引起的,所以在初次观察时因尽量可能想出一些可能出问题的模块,在此基础上进一步排除。(排除法

   另一种方法,是通过现象可能明显观察出出问题的模块,可以快速进行定位。(单刀直入

2、在前面步骤定位了具体的模块,就需要深入细节进行探究了。

     程序顺序执行法:以人为类比)一个人是有各个器官,组织,各个系统组成的,这些东西让人成为了一种活得生物,并且具有了人的特质。所以我们给定这个人一定的行为,让他去做事,做好了,可能说明通过了这方面的测试。而做不好,则说明存在缺陷。那么参与这个活动的那些器官,可能有一些存在问题。(确定了一个大的集合,但是需要从中进一步筛选。为了进一步确定出问题的器官,可以给定另一个行为,根据是否出问题的情况,再次确定一个集合,然后根据实际情况进行集合的运算。依次类推。最终确定)

    调试时(未考虑多线程的情况),会发现出问题的模块。它之所以会出错,可能是因为自身原因,也可能是因为其他模块为其提供了错误的服务,不完善的服务。

查看时:(1)一般不查看模块3以及其以后的模块。

               (2)先查看模块2,再逐步向前寻找可能提供错误服务的模块。(可能前面会有多个模块提供错误服务

    模块1 ---》模块2 (问题模块)---》模块3 ·····   (执行了一次行为


也可能:(多个模块,同时为模块2提供服务) (可能用前面集合的办法会能进行筛选出一部分内容)

模块0 ---》模块2 (问题模块)

模块1 ---》模块2 (问题模块)



     数据流追踪法:调试时可以查看你所感兴趣的数据流的流向)从某种角度(生物学角度),程序的各个模块就像人的身体的各个组织,各个器官。人体中有着各种各样的系统(血液,神经等),他们各自相对独立的运行着。同样,一个程序也是如此,程序中的数据只有流动起来,才能让这个程序活起来,才能保持各个模块之间的相互供给,相互服务。

    所以当数据流经某个模块,更具体点是流经某个类,某个函数时,数据流出现了问题,说明这个模块可能错误的加工了数据。进而可以缩小范围,如此递推下去,知道定位到出错位置。(有种迭代的感觉)

     通过跟踪一个数据在不同的程序模块中的变化,发现错误的地方。(对上面的总结)

待续······


小技巧

1.如果程序报出了出错的位置,而你的那一行包含多条语句,尝试将语句进行分离,分成可以定位到具体原因的粒度。然后才能更进一步掌握出错位置。

2.【参考】想实现某个功能,可以去参看别人的代码是怎么写的(比如GitHub)。(刚开始写,一般都不会考虑太多事情,所以借鉴很重要)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值