bug原意是虫子,但是为啥把程序问题叫做bug?叫做虫子?

1947年9月9日,马克二号停止了运转,经过检查发现有一只飞蛾卡在继电器里面,由此导致了程序停止运行,这个是史上第一个bug

DeBug是每个程序员必备技能

一解决问题的流程:

  • 了解问题->定位问题->分析问题->解决问题->验证问题
  • 在解决问题之前一定要弄清楚具体的问题是什么,看到过太多纠结很久但发现自己所解决的问题并不是测试描述的问题的情况了;
  • 解决bug最耗时的地方在于定位问题和分析问题,这个可以借助"二"中介绍的几个方法

二解决问题的方法(排名分先后):

  • 借助搜索引擎:遇到有明显的异常信息,且自己并不熟悉为什么异常时候,最高效的解决方法是借助搜索引擎,这里的搜索引擎一定是谷歌,不是百度;借助搜索引擎能解决工作中的大部分bug,你要相信,全世界这么多开发人员,你遇到过的大多数问题其他人也遇到过
  • 打印调试法(日志日志调试法):这是最笨但是最有效的办法,人会说谎、断点调试可能会说谎,但是日志一定不会说谎(因为多线程,在多线程状态下以及断点情况下,错误并不能百分百找到以及调试正确位置。)

最基础的日志输出demo

  • 二分排除法:当你遇到随机问题、帮助他人解决bug或者遇到自己不熟悉的代码时候,通过屏蔽一部分代码,运行观察问题仍然存在,如果存在则进一步分析屏蔽一部分代码,直到定位到有问题的具体位置为止,这种方法能解决工作中很大一部分疑难杂症
  • 小黄鸭调试法:当你向某个对象陈述你的思路时,往往会有意想不到的结果,哪怕对方并不是一个生物
  • 断点调试法:受限于效率不高以及在多线程环境下面断点调试并不灵,有必要时候才考虑用这种方法;通常可以使用打印调试法来代替;
  • 线上求助:包括论坛提问、微信群提问;不到万不得已不要用这种方法,在有限的圈子里面,你遇到的一个具体技术问题很有可能其他人并没有遇到过,多数时候问了也是白问,但有时候也可能是一种有效的方法
  • 冷静法:思维走入了误区,那就放弃吧,转手忙点其他的吧,过会在回来想,可能就豁然开朗了,找到问题了
  • 随缘法:通常用在逻辑型的BUG上,代码瞎改,瞎(非真的胡乱整)调整位置,说不准就好了
  • 万能解决法:重启软件-重启服务器-重启电脑-换新电脑-重启地球
  • 重构法:重头到尾写一遍

解决方案

  1. 确认Bug是否在本地可以重现
  2. 确认Bug在哪一段代码中
  3. 去除所有无关代码,只去调试和Bug相关的代码
  4. 和之前正常运行的版本对比,尝试恢复到之前可以正常运行的代码
  5. 重新写一个Demo,确认是否可以正常运行,可以的话,移动代码到原有代码
  6. 如果本地无法重现,打日志,观察线上行为
  7. 重启一些东西
  8. 向大佬提问

[精易软件开发工程师Leo学习笔记]011DeBug(调试)相关推荐

  1. [精易软件开发工程师Leo学习笔记]010模块化开发+API

    模块化开发 现在模块化开发分为两种,但是他们也可以说成是一种,都是 1.是模块化设计思维,是把一个产品分为若干个功能(模块),然后若干个子功能拼接起来,就是一个产品 2.减少不必要的重复工作,某个功能 ...

  2. [精易软件开发工程师Leo学习笔记]009组件-窗口

    列举几个组件 按钮.编辑框.标签.组合框.时钟.服务器.客户端.通用对话框等等... 组件分类: 属性(组件的外观或者配置相关):共有属性/私有属性 方法(组件提供的命令):共有方法/私有方法 事件( ...

  3. [精易软件开发工程师Leo学习笔记]005数组

    很多新手都会在数组这里懵逼,数组是存储多个相同类型的数据 易语言的数组是从1开始,不像其他语言是从0开始 数组的索引在其他语言一般叫做下标 如果是多维数组,假设2维数组,4,4:取数组成员数之后就是4 ...

  4. [精易软件开发工程师Leo学习笔记]007流程控制

    如果: 如果:满足条件执行一个分支,不满足则执行另外一个分支 分支线是告诉开发者成立与不成立的执行区域 下面这段代码,如果里面条件成立,所以运行第一条分支,也就是输出成立  判断和如果的区别: 判断规 ...

  5. 网易微专业之《前端开发工程师》学习笔记(1)

    何为网易微专业? 微专业是由网易云课堂联合各领域知名专家,以就业为导向,精心打造的职业培训方案. 按要求完成学习,考试通过可获得专业认定证书,令你求职或加薪多一份独特优势. 一个微专业包含了多门必修课 ...

  6. 第一次写博客-C/C++软件开发工程师需要学习哪些东西?

    学习路线概述 概述 数据结构和算法 操作系统 计算机网络 数据库 设计模式 概述 作为一名本科机械电子,研究生研究计算机视觉方向的211应届毕业生,如何才能从事C/C++软件开发类的工程师呢?如果能有 ...

  7. 大数据高级开发工程师——Spark学习笔记(9)

    文章目录 Spark内存计算框架 Spark Streaming Spark Streaming简介 Spark Streaming架构流程 什么是DStream DStream算子操作 1. Tra ...

  8. 大数据高级开发工程师——Spark学习笔记(7)

    文章目录 Spark内存计算框架 Spark SQL SparkSQL架构设计 1. SparkSQL的架构设计实现 2. Catalyst执行过程 SQL 解析阶段 Parser 绑定逻辑计划 An ...

  9. 大数据高级开发工程师——Spark学习笔记(6)

    文章目录 Spark内存计算框架 Spark SQL SparkSQL概述 1. SparkSQL的前世今生 2. 什么是 SparkSQL SparkSQL的四大特性 1. 易整合 2. 统一的数据 ...

  10. 大数据高级开发工程师——Spark学习笔记(10)

    文章目录 Spark内存计算框架 Spark Streaming Checkpoint 1. checkpoint的基本介绍 2. 什么时候需要使用checkpoint 3. 如何使用checkpoi ...

最新文章

  1. 如何使用Git提高研发团队工作效率?
  2. 探索 OSGi 框架的组件运行机制
  3. 8种你可能正在写错的SQL用法
  4. ubuntu16.04下安装opencv3.2版本
  5. 为什么真正的神经元学得更快
  6. [JLOI2008] CODES
  7. 新浪网产品设计指南(含UI规范)
  8. 190507每日一句
  9. 蝰蛇音效音效包_用数据科学分析音效迷艺术
  10. 前端技术-HTML5与CSS
  11. BLE 配对流程梳理
  12. 计算机应用软件弹窗消除,去除电脑弹窗广告的4种方法
  13. 基于Java+springboot+mvc+vue员工管理系统
  14. 阿里云服务器遇到的问题
  15. 三线表里加小短线_LaTeX 第六课:图表的排版
  16. 组合数算法的非递归实现
  17. dij最短路+堆优化
  18. 回顾第7周多行星星图
  19. 市值超660亿,居然之家成功借壳上市
  20. 解决 Ubuntu upgrade 常见错误 W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw

热门文章

  1. 工作报告模板下载_免费工作报告图片设计素材_第2页_包图网
  2. 基于matlab的gmsk,基于matlab的gmsk
  3. 【IoT】NFC APDU 使用基础浅析
  4. cocos之Gif图
  5. 燕秀计算机打印区域文字高度,燕秀快捷键(全)
  6. 自动化专业考研方向简介
  7. linux查看内存使用情况top详解
  8. 第三章 操作系统基础
  9. tpadmin隐藏index.php,百度云服务器tp5框架布署,隐藏路径中的index.php
  10. 【VBA】excel客户数据打印录入控件