What is Bug and What is Debugging

找到bug并消除,最后手段,测试发现问题,debug消除问题

Process for debugging

  • reproduce 重现
    找到一种可靠且方便地按需重现问题的方法
  • diagnose 诊断
    构建假设,并通过执行实验来测试它们,直到您确信自己已经确定了缺陷的潜在原因
  • fix 修复
  • reflect 反思

Reproduce the bug

从最小的测试用例集开始复现错误,确定哪些因素和bug有关,找出来并变化值
注意软件版本,软件的运行环境,输入数据

Diagnosing the bug

  • 测量
    指令插入
  • 分治
    排除法
  • 切片
  • 寻找差异
    利用版本控制,找出前后差异
    git bisect
  • 符号调试
    软件构造6.4
  • debugger调试器

Debugging tools

  • Debugging by Brute Force
    看内存导出文件,到处 println(),自动化调试工具

Post-mortem debugging: memory dump事后调试:内存转储

硬盘上的一种文件,包含某一特定时间进程内存内容的副本,当进程因某种内部错误或信号而中止时产生
当程序中止时,可以进行内存转储,以便在崩溃时检查程序的状态

Post-mortem debugging: stack trace 事后调试:堆栈跟踪

软件构造6.4
getStackTrace
软件构造6.4

Printf debugging 利用程序的动态信息输出进行调试

软件构造6.4

Logging 充分利用日志,可以发现一些问题

软件构造6.4
软件构造6.4
getlogger
来定义自己的log
软件构造6.4
日志处理器也需要设定日志级别
软件构造6.4
也可以是FileHandle等其他位置

Compiler Warning Messages

Debugger: breakpoints, etc

step over 不进入其他方法
step into 进入
step return 运行整个方法

相关文章: