调试器往往能演示,却未必能稳定地反复使用。测试应覆盖整个生命周期,以及几个最容易被遗漏的交界处。
从基础生命周期开始
分别检查启动调试、附加现有任务、停在入口和直接运行。再覆盖暂停、继续、停止和重新连接。每一步都需要同时观察客户端展示和目标系统状态,避免界面显示已停止,目标任务却仍在运行。
让断点经历完整的变化
测试添加、禁用、启用和删除断点,并覆盖多个断点、同一地址重复设置、任务退出后清理,以及共享代码场景。单步需要区分进入函数、跳过函数和退出函数,并检查源码与反汇编的对应关系。
维度一:内核任务 / 用户任务
维度二:启动 / 附加 / 重连
维度三:断点 / 单步 / 继续 / 退出
维度四:寄存器 / 栈 / 变量 / 符号记录通过、失败和未测试
未测试不能视为通过。记录测试环境、镜像版本、步骤、预期和实际结果。对于不适用场景也说明原因,避免下一次复用清单时误判覆盖范围。
把故障转成回归用例
每修复一个可复现问题,保留能区分修复前后的最小用例。测试应验证外部行为,而不是只检查某一行实现是否存在。多核和重连类问题,通常还需要重复执行以观察偶发状态错误。
可靠的调试体验,来自那些演示时不显眼、日常使用时却反复发生的细节。