软件构造6.4
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 - 符号调试
- debugger调试器
Debugging tools
- Debugging by Brute Force
看内存导出文件,到处 println(),自动化调试工具
Post-mortem debugging: memory dump事后调试:内存转储
硬盘上的一种文件,包含某一特定时间进程内存内容的副本,当进程因某种内部错误或信号而中止时产生
当程序中止时,可以进行内存转储,以便在崩溃时检查程序的状态
Post-mortem debugging: stack trace 事后调试:堆栈跟踪
getStackTrace
Printf debugging 利用程序的动态信息输出进行调试
Logging 充分利用日志,可以发现一些问题
getlogger
来定义自己的log
日志处理器也需要设定日志级别
也可以是FileHandle等其他位置
Compiler Warning Messages
Debugger: breakpoints, etc
step over 不进入其他方法
step into 进入
step return 运行整个方法