zoukankan      html  css  js  c++  java
  • bug记录2013424>要注意细节

    世上最痛苦的事情莫过于看别人的代码,而如果这个人的代码又写的极其不规范,逻辑混乱,胡乱堆砌,不知所云的时候,痛苦简直成指数倍增长!

    今天定位一个和二维码拍摄相关的问题

    问题描述:相机入口有拍二维码和拍应用2种模式。拍应用解析缓冲时锁屏,解锁后相机会黑掉or恢复成拍摄模式(缓冲view依旧显示,但是模式已经乱掉,既无法继续拍应用,也无法拍二维码),但是home键切后台却不会(再切回来依旧是正常的解析缓冲页)。

    解决过程:

    因为我也是刚刚接手这一块,心想home键置后台和锁屏没什么区别,为毛会导致这样的问题?

    刚刚开始看这一块,想着先搞清楚是咋回事儿吧,经过一番纠结,总算在混乱的代码之中大致理清楚了处理流程。

    bug描述是锁屏会出现,home切后台不会出现,原谅我这人比较落后,首先的想法就是打断点看着两者的区别,结果显然没啥区别。然后又猜想是不是onPause/onResume的时候界面没有控制好(界面控件极多极混乱),找了半天,好像也没有什么特别明显的错误。接着又猜想是不是相机的控制有问题,找了半天也没发现。纯逻辑排查不成,只好关键点打日志,终于发现了一点蛛丝马迹。

    原来,在onResume的时候,代码会根据一个sharedPreferences的键值来对扫描控制Handler-ScanHanlder重新做一个初始化,这个sharedPreferences存储的就是最常用的firsrt_use,首次调用。but!!!它调完了以后,却没有给这个first_use赋值为false并commit!!!后面ScanHandler重新初始化却又依赖这个键值对……于是导致了上面的问题。

    结论:

    也就是说,最终导致bug的其实是一个很小的失误,并且和我看见这个bug后所猜测的原因一条也不符合……并且,它花了我2个多小时来定位(当然,一半的原因可能是我对代码不熟)。

    感想:

    有些bug是你一看就知道很难定位的,还有一些,是看上去似乎颇好定位,实际却不是那么好定位的(比方说上面的这个bug),但是……真正引发难定位bug的,往往都是code过程中的一些细节。可能只是缺少一个安全性判断,然而又没有抛异常,可能是一个switch,没有考虑全面,又没有加一个default处理……很多小问题并不会影响程序的运行,但是问题却会层层递进,直到在一个你完全不会想到的地方爆发出来,成为一个无法容忍的bug,但是此时,你已经无法一眼看出它的源头了。

    这样的bug,真的是不好定位,等到你花了大把时间,反复尝试重现,终于顺着可怜一点踪迹摸到了始作俑者,此刻你只想仰头长啸——‘谁TM写的垃圾代码!’or‘我TM怎么会犯这种低级错误!’

    所以,平常code,还是多细心多考虑全面一点,不要只是为了先做一个东西出来而忽略了质量。写代码就像江湖,出来混,总是要还的。今天你可以一天搞定一个程序,明天说不定要花一周来解bug,还不如花3天好好写,说不定只要2天就能让程序稳定。所谓快,最终都是慢罢了!静下心来做事,与大家共勉。

  • 相关阅读:
    左孩子右兄弟的字典树
    UVA 1401 Remember the Word
    HDOJ 4770 Lights Against Dudely
    UvaLA 3938 "Ray, Pass me the dishes!"
    UVA
    Codeforces 215A A.Sereja and Coat Rack
    Codeforces 215B B.Sereja and Suffixes
    HDU 4788 Hard Disk Drive
    HDU 2095 find your present (2)
    图的连通性问题—学习笔记
  • 原文地址:https://www.cnblogs.com/arthur3/p/3041398.html
Copyright © 2011-2022 走看看