调试过程经历了哪四个阶段?
| 阶段 | 触发条件 | 核心特征 |
|---|
| 本机调试 | 输入输出设备差、延迟长 | 一次机器会话尽可能多地包含试验操作 |
| 内存转储 | 机器资源稀缺、成本高 | 运行到检测失败后转储全部内存, 桌面分析 |
| 快照 | 内存规模增长, 全转储不可行 | 选择性转储、选择性跟踪、把快照插入程序 |
| 交互式调试 | 分时系统出现 | 被调试程序与终端关联, 由监督调度程序控制 |
- 演进逻辑: 每一步都在"计算机时间昂贵"与"人的思考时间昂贵"之间重新寻找平衡;
本机调试的特点和"重大罪过"是什么?
- 做法: 仔细设计调试过程--计划停止的地点、检验内存的位置、需要检查的东西、没有预期结果时的对策;
- 代价: 花费在编写调试程序上的时间可能是程序编制时间的一半;
- 重大罪过: 在没有把程序划分成测试段、没有对执行终止位置进行计划的前提下, 粗暴地按下"开始";
- 收益: 两小时的交互过程可能发现一打问题;
内存转储和快照为什么出现?
- 内存转储的动机: 计算机时间非常昂贵, 用批处理周期换取机器使用效率;
- 代价: 桌面工作方式比以前更含混, 且发生在测试执行之后; 用户调试时间更长, 因为测试依赖批处理周期;
- 快照的动机: 内存从 2000-4000 字增长到 8K-16K 字节后, 转储整个内存不再可行;
- 技术顶点: OS/360 TESTRAN 允许把快照插入程序而无需重新汇编和编译;
- 后续失效: 交互式计算和快速编译使"无需重编译的批调试"概念整体落伍, 源代码级调试和快照成为优先选择;
交互式调试带来了什么变化?
- 思想来源: Codd 及其同事与 Strachey 在 1959 年分别发表论文, 提出兼有本机调试实时性和批处理使用率的方案;
- 落地路径: Strachey 的想法在 1963 年由 Corbató 等人在 7090 实验系统上实现, 由此发展出 MULTICS、TSS 和后来的分时系统;
- 机制: 多个程序载入内存, 被调试程序与只能由程序控制的终端关联, 由监督调度程序控制调试过程; 终端前的人思考时, 监督程序运行其他程序;
- 主要差异: 工具性软件、调度监控程序和语言解释编译器的出现;
- 关键变化: 不再需要像本机调试那样预先计划, 因为停顿和思考时计算机时间没有被浪费;
交互式调试的潜力为什么没有被充分挖掘?
- Gold 实验的结果: 每次调试会话中, 第一次交互取得的工作进展是后续交互的三倍;
- 解释: 由于缺乏对调试会话的计划, 原有本机调试技术中那段高效率的时间消失了;
- 正确用法: 每两小时终端会话对应两小时桌面工作--1 小时清理(更新调试日志、更新程序列表、研究解释奇怪现象);
- 另外 1 小时准备: 为下一次操作设计详细测试, 进行计划的变更和改进;
- 结论: 没有计划难以维持两小时的高生产率; 没有事后清理难以保证后续会话的系统化和持续推进;