常用BUG解决方法

扯淡

  随着工作时间越来越长,对于代码的理解也越来越多!关注重点也渐渐地从代码本身转移到了代码结构性、解决问题方法性等方面。下面就来说一说,在遇到代码BUG,我们常用的一些方法!

二分定位法

  通常来说,无论BUG因此多深,通过二分定位法基本可以确定问题所在!那么什么是二分定位法?就是在程序关键点(可能的出错点)进行分割,看看还会不会出问题,类似二分查找的方法,逐步缩小问题范围。
  二分定位法适用于绝大所数问题环境。对二分定位法作进一步扩展延伸,就会得出我们常用一些BUG解决方法:

  • 注释大法: 将代码一点点注释,来缩小范围
  • Printf大法: 在合适的代码位置对特定的变量等进行输出
  • 日志大法: 在代码合适位置记录相关变量等关键数据

或许你还有其他名称的方法,但是基本都属于二分定位法的范畴!

IDE调试法

  此法在程序开发阶段是绝对的利器!通过加断点、单步调试等可以快速的发现问题所在。突然想到了宇宙第一IDE:Visual Studio。但是,该方法有个比较大的限制:对于非逻辑性错误(比如内存泄露)来说,IDE调试法就有些乏力了。因为单纯的调试,可能BUG并不会出现。而且一旦出现该种问题,可能会直接导致IDE调试不可用。
  其实,IDE调试,不仅仅是找BUG解决问题,对于分析代码逻辑来说无二选择。对于某些设计逻辑的实现,是否符合当初的设计。仅仅通过最终结果不能证明正确,还是需要通过IDE来验证!殊不知,在破解、逆向领域,调试绝对的NB,谁会有心情闷头看那一堆汇编代码,直接上调试器分析多好。

小黄鸭调试法(Rubber duck debugging)

  又称橡皮鸭调试法,黄鸭除虫法。就是通过向不懂程序的人(只要是不了解要解释的代码的任何一个人都可以,比将你写的代码解释给你的同事)详细解释代码,从中发现问题或者获取灵感! 此概念是参照于一个来自《程序员修炼之道》书中的一个故事。传说中程序大师随身携带一只小黄鸭,在调试代码的时候会在桌上放上这只小黄鸭,然后详细地向鸭子解释每行代码。
常用BUG解决方法_第1张图片
  许多程序员都有过向别人(甚至可能向完全不会编程的人)提问及解释编程问题,就在解释的过程中击中了问题的解决方案。一边阐述代码的意图一边观察它实际上的意图并做调试,这两者之间的任何不协调会变得很明显,并且更容易发现自己的错误。如果没有玩具小鸭子也可以考虑向其它东西倾诉,比如桌上的花花草草,键盘鼠标。
  类似的,有一种现象叫做ConeofAnswers,这是一个常见的现象。你的朋友跑来问你一个问题,但是当他自己把问题说完,或者说到一半的时候就想出了答案走了,留下一脸茫然的你。是的,这个时候你就起到了那只小黄鸭的作用。
  相似的概念还有不少,列如自白调试、纸板程序员或程序员的假人、想出脑外等等。总的来说,在你试图表述自己的想法的过程中,自然地在促使自己去整理思路,重新考虑问题。
  这种方法流传开后,很多程序员效仿,开始拿其他玩具,比如手办、喜欢二次元的、还会拿初音或者是其他公仔呀。
常用BUG解决方法_第2张图片

重读法

  这种方法比较简单直接,就是通过一遍遍地阅读代码来发现问题。

重构法

  终极必杀器。如果最终无论如何也不能找到BUG的问题所在,那就直接重构吧!重构有个问题需要注意,就是重构时不要再参看之前的代码!重构必须要考虑结构性的设计问题!
  当然,对于简单的代码(对整体代码结构影响不大),直接重写会更迅速!

总结

  常用的BUG查找方法基本就是以上这几种,可能你还有不同的叫法或者其他方法。在实际问题解决中,可能需要多种方法结合使用。
  优先解决可重现的bug,有些bug不是很明显,那么就想办法增加他的破坏性,把现象放大,这在我们的系统压力测试时会经常遇到一种方法。有时候我们甚至需要问自己,如果我要实现bug描述的现象我要怎么写代码才行?
最后放几个奇葩注释!

//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼                 BUG辟易  
//          佛曰:  
//                  写字楼里写字间,写字间里程序员;  
//                  程序人员写程序,又拿程序换酒钱。  
//                  酒醒只在网上坐,酒醉还来网下眠;  
//                  酒醉酒醒日复日,网上网下年复年。  
//                  但愿老死电脑间,不愿鞠躬老板前;  
//                  奔驰宝马贵者趣,公交自行程序员。  
//                  别人笑我忒疯癫,我笑自己命太贱;  
//                  不见满街漂亮妹,哪个归得程序员?  
//_ooOoo_  
//o8888888o  
//88" . "88  
//(| -_- |)  
// O\ = /O  
//___/`---'\____  
//.   ' \\| |// `.  
/// \\||| : |||// \  
/// _||||| -:- |||||- \  
//| | \\\ - /// | |  
//| \_| ''\---/'' | |  
//\ .-\__ `-` ___/-. /  
//___`. .' /--.--\ `. . __  
//."" '< `.___\_<|>_/___.' >'"".  
//| | : `- \`.;`\ _ /`;.`/ - ` : | |  
//\ \ `-. \_ __\ /__ _/ .-` / /  
//======`-.____`-.___\_____/___.-`____.-'======  
//`=---='  
//  
//         .............................................  
//          佛曰:bug泛滥,我已瘫痪!  
/*
*      
*          ┌─┐       ┌─┐
*       ┌──┘ ┴───────┘ ┴──┐
*       │                 │
*       │       ───       │
*       │  ─┬┘       └┬─  │
*       │                 │
*       │       ─┴─       │
*       │                 │
*       └───┐         ┌───┘
*           │         │
*           │         │
*           │         │
*           │         └──────────────┐
*           │                        │
*           │                        ├─┐
*           │                        ┌─┘    
*           │                        │
*           └─┐  ┐  ┌───────┬──┐  ┌──┘         
*             │ ─┤ ─┤       │ ─┤ ─┤         
*             └──┴──┘       └──┴──┘ 
*                 神兽保佑 
*                 代码无BUG! 
*/
 /** 
 *  
 * __   (__`\ 
 * (__`\   \\`\ 
 *  `\\`\   \\ \ 
 *    `\\`\  \\ \ 
 *      `\\`\#\\ \# 
 *        \_ ##\_ |## 
 *        (___)(___)## 
 *         (0)  (0)`\## 
 *          |~   ~ , \## 
 *          |      |  \## 
 *          |     /\   \##         __..---'''''-.._.._ 
 *          |     | \   `\##  _.--'                _  `. 
 *          Y     |  \    `##'                     \`\  \ 
 *         /      |   \                             | `\ \ 
 *        /_...___|    \                            |   `\\ 
 *       /        `.    |                          /      ## 
 *      |          |    |                         /      #### 
 *      |          |    |                        /       #### 
 *      | () ()    |     \     |          |  _.-'         ## 
 *      `.        .'      `._. |______..| |-'| 
 *        `------'           | | | |    | || | 
 *                           | | | |    | || | 
 *                           | | | |    | || | 
 *                           | | | |    | || |     Joan Stark 
 *                     _____ | | | |____| || | 
 *                jgs /     `` |-`/     ` |` | 
 *                    \________\__\_______\__\ 
 *                     """""""""   """""""'""" 
 * 
 */  
/* 

                       .::::. 
                     .::::::::. 
                    :::::::::::  FUCK YOU 
                ..:::::::::::' 
              '::::::::::::' 
                .:::::::::: 
           '::::::::::::::.. 
                ..::::::::::::. 
              ``:::::::::::::::: 
               ::::``:::::::::'        .:::. 
              ::::'   ':::::'       .::::::::. 
            .::::'      ::::     .:::::::'::::. 
           .:::'       :::::  .:::::::::' ':::::. 
          .::'        :::::.:::::::::'      ':::::. 
         .::'         ::::::::::::::'         ``::::. 
     ...:::           ::::::::::::'              ``::. 
    ```` ':.          ':::::::::'                  ::::.. 
                       '.:::::'                    ':'````.. 


*/  

你可能感兴趣的:(杂记)