第七章--第四节:调试(Debugging)

第七章:软件构造的健壮性.

第四节:调试(Debugging)


问题一:什么是bug

  • 程序中的错误,导致程序以非预期或未预料到的方式执行。
  • 一个包含大量bug和/或严重干扰其功能的bug的程序被称为buggy。
  • 报告程序中的bug通常被称为bug报告、故障报告、问题报告、故障报告、缺陷报告等。

问题二:常见的bug的类型

  • 数学bug:例如 零除法,算术溢出
  • 逻辑bug:例如 无线循环和无限递归
  • 源头bug:例如 使用了为被定义的变量、资源泄漏,其中有限的系统资源如内存或文件句柄通过重复分配耗尽而不释放。缓冲区溢出,其中程序试图将数据存储在分配存储的末尾。
  • 团队工程bug:例如 评论过时或者评论错误、文件与实际产品的区别

问题三:调试的过程

    过程:重现(Reproduce)-->诊断(Diagnose/Locating)-->修复(Fix)-->反思(Reflect)

    1.重现(Reproduce)

    含义:寻找一种可靠、方便地再现需求问题的方法

    2.诊断(Diagnose/Locating)

    含义:构建假设,并通过进行实验来检验它们,直到你确信你已经确定了bug的根本原因

    方法:"Wolf fence" algorithm 防狼围栏算法

    3.修复(Fix)

    含义:设计和实施解决问题的变更,避免引入回归,维护或提高软件的整体质量。

    4.反思(Reflect)

    含义:学习错误的教训。事情出了什么问题?是否有同样的问题需要修复?你能做些什么来确保同样的问题不会再次发生?

问题四:调试的方法和工具的种类

  1. 暴力调试
  2. 递归调试
  3. 演绎调试
  4. 回溯调试
  5. 测试调试

问题五:暴力测试

    1.看内存导出文件


2.看栈的轨迹(stack trace)


3.到处打印(Printf)

  • 在程序内部各部分展示程序执行时的动态信息,比使用静态的dump分析更有效。
  • 一旦软件对外发布,所有用于debug的printf语句都要去除或禁用。

4.日志(log)

  • 通过设定日志级别来确定要log哪些信息
  • log结果可被多种渠道加以处理,可通过设定条件进行过滤,并输出为多种格式
  • 可使用层次化的多个日志记录器


问题六:设置断点进行调试


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值