选举阅读:震动,Java+ lua = 王炸
今天我们聊一聊世界汗青上,最典范且让人摸不着思维的闻名 bug。
整数溢出
1996 年 6 月 4 日,欧洲空间局(European Space Agency,ESA)发射的亚利安 5 号(Ariane 5)运载火箭在法属圭亚那的库鲁发射场发射后仅 40 秒就爆炸了。那枚火箭颠末长达十年的研发,耗资 80 亿美圆后停止首飞,但那一 Bug 的成果招致了 3.7 亿美圆的缺失。
首飞失败的原因是整数溢出,那是计算机编程中一个普及存在的错误。在本例中,有人试图在 16 位空间中设置 64 位数字。
别的,PayPal 也犯过错。PayPal 不测向某人付出 92 万万亿美圆。
当 Chris Reynolds 翻开他的 PayPal 电子邮件对账单时,那位宾夕法尼亚州公关主管的账户余额展现为 92,233,720,368,547,800 美圆。
在 64 位数字的世界里,那个数字过分浩荡,意味着存在编程错误。所幸那一错误很快就被发现,当他再次登录时,他的账户已经回零。
PayPal 表达情愿为 Reynolds 抉择的事业捐赠一笔数额不详的资金。
Windows 98 演示中的蓝屏死机
BSOD 或蓝屏死机(Blue Screen of Death),是 Windows 系统发作致命系统错误后展现的蓝色错误屏幕。它展现了系统已瓦解,此时操做系统已经处于无法可靠地运行的形态。那是由几个差别问题引起的,例如关键历程不测末行或一般硬件毛病。
在 Windows 98 或 Windows 95 中,当系统测验考试拜候硬盘上的文件 c:\aux\aux 或 c:\con\con 时,就会发作蓝屏死机。
曲到 2000 年 3 月 16 日,Microsoft 才发布一个平安更新来处理那个问题。
电子邮件无法发送到 500 英里以外
那是 Bug 界最典范的传奇之一。
我在做校园的邮件系统治理员的时候,有用户向我抱怨说:他们不克不及发送超越 500 英里间隔的 email… 假设你之前没有听过那个故事。假设你就是那个治理员。此刻能否一脸懵逼。填补素材:用户中有位天文统计人员,还添枝接叶地造造了一张邮件发送失败地图,地图上展现,她邮件的送达区域半径比 500 英里就多那么一点点:半径内的收件人,全收到了,之外的,全失败了。
请给出你的 debug plan。别说是邮票没贴够。
本相:一次软件晋级招致长途办事器超不时间被设为 0。在一个具有典型负载的特定机器上,零超时意味着假设毗连时间略微超越 3 毫秒,办事器就会末行毗连。而以光速传布的电信号,在 3 毫秒的时间内所能抵达的间隔大约是:
0.003 * c (光速) = 558.84719 miles
只要在礼拜三才会瓦解的系统
那是 Bug 界最典范的传奇之二。
一家病院用来监控病人安康的数据库,每到周三,会本身瓦解。我在周三的时候凡是也会瓦解。因为那天有组会。但我觉得那应该不是那道问题的谜底。填补素材:该事务中,更大的难度在于,一周只要一天有时机 debug。该系统笔录日记是用 C 风气的代码编写的,把日记字符串笔录到了一个固定长度的缓冲区中,此中日记时间一栏,格局例如Monday, July 17, 1997, 10:38:47.123。请给出你的debug plan。
本相:
因为周三的日记的时间一栏,缓冲区刚好溢出了。(就差一个字节写不下)不会有来自星星的 bug 也没有哪个 bug 是太阳的后嗣所有那些你认为的、不吝穿越过时空,来与你情定此生的 bug 都特么是你曾经的二比惹的祸。
当我坐在窗边的时候,内存读写就会失败
那是 Bug 界最典范的传奇之三。
给一个本身设想的 SD 卡掌握器写驱动,从蒲月起头调试,不断很顺利,到了七月份突然起头呈现间歇性的 SD 卡读写失败,并且越靠近窗户,失败频次越高。搜刮公家号互联网架构师,存眷后回复9有欣喜!
本相:电路板上芯片的一般工做温度有限,当超越必然的温度时它就带不动负载了,而7月的正午,太阳正好会通过窗户会照到板子,招致温渡过高。
摇动游戏手柄的时候,游戏存档就会失败
那是 Bug 界最典范的传奇之四。
在开发 PS1 游戏“袋鼠猛进击”那款游戏的存档/读档时候碰着的。Bug 的症状是每隔一段时间存档/读档城市超时失败。而且非常随机。像我那种游戏历来都是一命通关的人其实不是很在乎能不克不及存档的填补素材:该事务中的难点在于重现 bug。当开发人员把可能出错的代码已经正文到了四大皆空的时候,bug 仍然随机呈现。偶尔间,测试发现了快速重现 Bug 的办法:一边摆脱手柄,一边存档。请给出你的 debug plan。
本相:PS 的时钟在高频次下运行时,会影响到主板旁边的晶振,形成手柄掌握器的内存卡掌握器之间的串扰。手柄上一有信号,内存就被骚乱了。
千年虫 bug
那是 Bug 界最典范的传奇之五。
那个千年问题是由 Bob Bemer(美国,ASCII 之父)在 1958 年第一次提出的。在其后的二十年里,他用了很大的勤奋,期看政府、企业和国际组织(如 IBM 和 ISO)来存眷那个问题,但反应寥寥。曲到 2000 年将要到来的时候,人们才觉得到两千年问题的紧迫性。于是社会和政府都投进了大量的人力和物力来制止发作大规模的计算机灾难。而从如今来看,那些勤奋也获得了响应的功效。
“千年虫”还包罗以下两个方面的问题:一个是在一些计算机系统中,关于闰年的计算和识别呈现问题,不克不及把 2000 年识别为闰年,即在该计算机系统的日历中没有 2000 年 2 月 29 日那一天,而是间接由 2000 年 2 月 28 日过渡到了 2000 年 3 月 1 日;另一个是在一些比力老的计算机系统中,在法式中利用了数字串 99(或 99/99 等)来表达文件完毕、永久性过时、删除等一些特殊意义的主动操做,如许当 1999 年 9 月 9 日(或 1999 年 4 月 9 日即 1999 年的第 99 天)来暂时,计算机系统在处置到内容中有日期的文件时,就会碰着 99 或 99/99 等数字串,从而将文件误认为已颠末期或者将文件删除等错误操做,引发系统紊乱以至瓦解等毛病。
Y2K 问题,或者 Y2k 问题是两千年问题的一个凡是喊法。此中 Y 表达"year"也就是年,而 K 则表达拉丁前缀"kilo",表达 1000。Y2K 或者 Y2k 就是指 2000 年。