跳到主要内容

构件单元调试的演进

调试过程经历了哪四个阶段?​

阶段触发条件核心特征
本机调试输入输出设备差、延迟长一次机器会话尽可能多地包含试验操作
内存转储机器资源稀缺、成本高运行到检测失败后转储全部内存, 桌面分析
快照内存规模增长, 全转储不可行选择性转储、选择性跟踪、把快照插入程序
交互式调试分时系统出现被调试程序与终端关联, 由监督调度程序控制
  • 演进逻辑: 每一步都在"计算机时间昂贵"与"人的思考时间昂贵"之间重新寻找平衡;

本机调试的特点和"重大罪过"是什么?​

  • 做法: 仔细设计调试过程--计划停止的地点、检验内存的位置、需要检查的东西、没有预期结果时的对策;
  • 代价: 花费在编写调试程序上的时间可能是程序编制时间的一半;
  • 重大罪过: 在没有把程序划分成测试段、没有对执行终止位置进行计划的前提下, 粗暴地按下"开始";
  • 收益: 两小时的交互过程可能发现一打问题;

内存转储和快照为什么出现?​

  • 内存转储的动机: 计算机时间非常昂贵, 用批处理周期换取机器使用效率;
  • 代价: 桌面工作方式比以前更含混, 且发生在测试执行之后; 用户调试时间更长, 因为测试依赖批处理周期;
  • 快照的动机: 内存从 2000-4000 字增长到 8K-16K 字节后, 转储整个内存不再可行;
  • 技术顶点: OS/360 TESTRAN 允许把快照插入程序而无需重新汇编和编译;
  • 后续失效: 交互式计算和快速编译使"无需重编译的批调试"概念整体落伍, 源代码级调试和快照成为优先选择;

交互式调试带来了什么变化?​

  • 思想来源: Codd 及其同事与 Strachey 在 1959 年分别发表论文, 提出兼有本机调试实时性和批处理使用率的方案;
  • 落地路径: Strachey 的想法在 1963 年由 Corbató 等人在 7090 实验系统上实现, 由此发展出 MULTICS、TSS 和后来的分时系统;
  • 机制: 多个程序载入内存, 被调试程序与只能由程序控制的终端关联, 由监督调度程序控制调试过程; 终端前的人思考时, 监督程序运行其他程序;
  • 主要差异: 工具性软件、调度监控程序和语言解释编译器的出现;
  • 关键变化: 不再需要像本机调试那样预先计划, 因为停顿和思考时计算机时间没有被浪费;

交互式调试的潜力为什么没有被充分挖掘?​

  • Gold 实验的结果: 每次调试会话中, 第一次交互取得的工作进展是后续交互的三倍;
  • 解释: 由于缺乏对调试会话的计划, 原有本机调试技术中那段高效率的时间消失了;
  • 正确用法: 每两小时终端会话对应两小时桌面工作--1 小时清理(更新调试日志、更新程序列表、研究解释奇怪现象);
  • 另外 1 小时准备: 为下一次操作设计详细测试, 进行计划的变更和改进;
  • 结论: 没有计划难以维持两小时的高生产率; 没有事后清理难以保证后续会话的系统化和持续推进;