IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

我听到过的最精彩的一个软件纠错故事

外刊IT评论 2011-01-16 22:31:21 累计浏览 4,963 次
本机暂存

    那还是80年代初期,我爸爸在一家存储设备公司工作,这个公司现在已经不存在了,它生产磁带机和驱动这些磁带高速运转的气动系统 ―― 这是那个时代的产物。

    

    (Used under license from Laughing Squid. 原始图片可以在 这里找到。)

    他们技术改造了磁带驱动器,使得你可以只有一个中心驱动器 ―― “A”盘 ―― 由它连接着数个“B”盘,在跟A盘连接的内存里驻留这一个小型的操作系统,负责代理所有B盘的数据的读写操作。

    每次当你启动A驱动器,你需要在外围驱动器里插入一张软盘,操作系统会把A盘加载到内存里。这个操作系统简单的出奇 ―― 它的处理能力全部从一个8字节的微型控制器产生。

    这种设备的目标用户是拥有大量数据的企业 ―― 银行,杂志等等 ―― 他们需要打印大量的地址簿或银行帐目。

    有个客户出现了一个问题。在打印的过程中,有个别的驱动器会停止工作,导致整个打印过程终止。为了重载驱动器,值班人员必须重启所有驱动 ―― 如果这种事情发生在一个6小时的打印任务中,大量宝贵的计算机使用时间都会浪费,整个任务将不能按时间完成。

    公司派出了技术人员。技术人员尽了他最大的努力也不能在测试环境复制出这个问题:这个问题似乎只会出现在打印大量任务的过程中。尽管问题出在硬件上可能性微乎其微,他还是更换了所有的设备 ―― 内存,微处理器,磁盘驱动,所有跟磁带机相关的部件 ―― 但问题仍然出现。

    于是技术人员打电话给总部叫来了一位专家

    专家要了一把椅子和一杯咖啡,坐在了计算机房 ―― 那个时候他们已经专门为计算机提供了机房 ―― 值班人员准备了一大堆的打印任务,他就在旁边看着。他等着,一直到机器崩溃。机器果真崩溃了,所有人都看着专家 ―― 专家没有发现任何的线索。他命令把打印任务重新执行一次,所有的值班人员和技术人员都回各自岗位工作。

    专家又在椅子上做下来,等着机器崩溃。这一等就是六小时,但真的又发生了。专家仍然没有弄清是什么导致了崩溃 ―― 除了有一点他注意到,崩溃总是发生在屋内人比较多的时候。他命令再打印一次,重新坐下,等着。

    当第三次崩溃时,他发现了一件事情。崩溃总是在值班人员更换其他没有关联的启动盘时发生的。进一步研究,他意识到当一个值班人员走过某块地板时崩溃就会发生。

    地板是由铝制的板块拼成,下面有6 到 8 英寸高的隔空层,计算机所使用的大量的电缆都走地板下,这样可以避免值班人员无意间踢到它们。地板块间拼合的很紧密,这是为了保证垃圾不掉进电缆通过的空间。

    

    专家说有一块地板变形了。当值班人员踩着这块变形的地板的一角时,地板块的边缘相互摩擦,这就会跟连接各地板的塑料之间产生静电,进而造成电磁干扰。

    如今所有的RAM都有防电磁干扰功能。但当时并没有这种技术。专家指出,电磁干扰破坏的RAM的工作,操作系统也就崩溃了。

    专家打电话给维护部门,拿来了一块新地板,他自己把它装上,问题就这样解决了。

[英文出处]:The Best Debugging Story I’ve Ever Heard 原图已失效

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. Fix Bug的五个阶段 (累计阅读 42,974)
  2. 调试工具之GDB (累计阅读 14,832)
  3. gdb的基本工作原理是什么? (累计阅读 11,684)
  4. 深入理解Nginx之调试优化技巧 (累计阅读 8,228)
  5. 内存越界的概念和调试方法 (累计阅读 7,279)
  6. webapp网页调试工具Chrome Devtools (累计阅读 6,986)
  7. 十五个只有程序员会乐的事情 (累计阅读 6,807)
  8. 程序员的样子 (累计阅读 6,104)
  9. libcurl中使用curl_easy_getinfo 产生段错误分析 (累计阅读 5,783)
  10. 让邮件飞一会儿 (累计阅读 5,715)