这是Quora上的一个问题,其中Mick的回答获得了13.5k“赞同”,他如此回忆道:

曾经有位心理学的博士雇我查一个BUG,程序是他的一个学生写的,经常会出现奇怪的输出。程序的功能是,从文件中读取数据,提出50个问题,进行一系列计算,然后基于这位博士的研究来得出一个分数。程序跑在大学的一台3B2上。他给我演示了程序,确认这个Bug可以重现——每次在问题之间切换的时候,总会闪出一些奇怪的字符。我觉得这应该很简单,所以答应了他,并且我们同意按小时付费。

Day1

我来到这台3B2面前,用那个学生的帐号登录,找到了用C写的源代码,并开始测试。代码可读性非常差,所有的代码都写在了一行,变量名都是三个字母,而且还是随机组合的!真庆幸我当初选择按小时收费。我把代码格式化为习惯的风格,这样看起来多少还能读。

做完之后,我用curses库移到屏幕上一个点,打印一个问题和答案,然后等待回应。但是在打印出第一行之后,出现了一些乱码,过了大约1/2秒之后,乱码被问题覆盖掉。这个问题应该很容易解决,只有五个地方需要打印信息,所有的地方都出现了一闪而过的乱码。小意思,只要删掉mvpwintw()应该就ok了。我删掉之后开始编译,觉得问题差不多解决了。但是运行的时候,干扰信息又出现了!只是乱码变了,但是症状还是一样!

我检查了一下代码,发现竟然回到了我改之前的样子!15个文件,混乱的格式,三个字母的变量。当初为什么不备份一下代码呢,真想射自己一枪。我再一次格式化它们,这次把代码放到三个文件中,以不同的名字命名。然后备份了整个文件夹,并且将权限设置为只读。编译之后,一切正常。一运行,这个文件夹中又出现了15个文件!我改过之后的源代码没有被删除,然后干扰信息又回来了。

我明白了,这一定是在硬盘的某个地方的代码,在编译的时候会将程序添加到我修改的代码中去。所以我准备搜索一下include区域(/usr/include),因为我们用的是研究的版本,所以除了kernel别的代码都在机器上。头文件太多了,所以在3B2上搜索需要花一些时间。以上,就是第一天的工作了。

Day2

从磁盘的搜索中没有得到什么结果,这说明这些乱码要么是被加密了,要么就是在lib中的某个地方。但是我没有搜到,我决定搜索所有的文本文件,这次花的时间比昨天更长,第二天就这这样过去了。

Day3

没有结果。字符串是加密的。我只好根据所有的头文件来一点一点查了。这会花费相当多的时间,我们同时还警告了学校,可能有人得到了Phelps博士计算机的root权限。但他们却对此并不关心,可能只是一台实验室的计算机吧。

我打开#include文件,却没有发现代码。后来发现这些都被编译成一个文件了。也没什么关系,毕竟我们有源代码,大不了就重新编译所有的库。

Days4-6

接下来是最难的部分了,我们好不容易向学校的书呆子说明了问题。然后让Mark(我觉得他能做Unix管理员完全是因为娶了Dean的女儿)开始学习编译。最后他终于同意交给我来做,因为他什么都不会。在第6天最后,编译工作终于完成了。

我拿出修改之后的代码,重新开始编译。一切正常,然后我运行了一下,天呐!这问题又出现了。源代码分成了15个文件,干扰信息又出来了。简直跟魔法一样,我觉得自己被打败了,问题肯定不在源代码里。Phelps博士也有点不乐意了,他觉得这么长时间,即使重新写一个也该完成了。“当然”,我失落地说,“你是对的,说不定重写比较好。”“好的,我们明天开始重写。”博士说。

Day7

见鬼去吧,我不会认输的!我跟Phelps博士说:“你不用付给我钱了,只要给我时间,我一定要找到这个bug。”

Days8-14

我学聪明了,他一定是修改了一些库,我开始研究编译出来的汇编(虽然我之前根本就不懂汇编),从开始学习,到最后看懂汇编代码,花了六天。虽然根本没发现什么异常,完全就是在浪费时间。

Day 15

突然,我意识到,问题可能出在编译器上,一定是。每次编译代码的时候,编译器就会往源代码中添加干扰信息。我以前也听说过这种情况。

啊耶!我找到了!我们也有编译器的源代码,我查了一下,谢天谢地,终于找到了。编译器链接器中的代码是这样的:

1)检测所有对fopen()的调用,在打开的文件中查找Phelps博士的问题,如果找到
2)编译的时候,重写15个文件
3)使用这15个文件编译博士的程序,在链接的时候会输出-o形式的名字

编译器被这个学生修改了,以便往Phelps博士的程序中添加代码。

几天之后,AT&T的技术支持提供了原版的编译器和链接器代码,我们重新编译,替换了被修改的编译器和链接器。

但是,问题还没有解决。编译器被其他我们没有的源代码污染了。这些代码存在于现在可执行的编译器中,在编译编译器的时候,会加入污染代码。但是它并不修改/usr/src中的代码,而是将其复制到一个隐藏文件夹,修改编译器源代码,编译,最后删除隐藏文件夹。AT&T发现这个问题花了好长时间。这个学生修改了编译器,让编译器重新编译的时候加入污染代码。最后我们不得不从另一台3B2机器上复制过来编译器的字节码文件版本,才终于解决这个问题。

通过编译器的代码我们还发现,如果编译/sbin/login的话会加入一些后门代码,可以允许任何人使用特定的密码来登入root。这台电脑可以通过调制解调器或Tymnet接入。终于,这件事引起了校方注意。

这人真是个天才,不过,也太恐怖了!


其他网友回答

  1. Bug只在产品中有,开发版本中却没有或者不可重现
  2. bug触发的几率很小很小,却又不能小到可以忽视
  3. 去改不是你写的代码中的bug,原来写代码的这家伙已经离职了
  4. 发生bug的地方是99.9%可靠的库,是你绝对不会怀疑的地方
  5. 几年来很多人尝试去修改的bug,但是没有人成功过
  6. 存在逻辑错误的bug,只有在运行一段时间之后才会触发
  7. debug需要特定领域的知识,正是你不懂的
  8. debug的deadline很紧
  9. Stack Overflow挂了
  10. 在Stack Overflow上搜索问题,发现有人一年前问了同样的问题,但是没有人回答。
  11. 分号键失灵
  12. 看自己一年以前的代码,有种“这真他妈是我写的”的感觉
  13. 库没有文档
  14. 客户又改需求了
  15. ==写成了=
  16. IE(如果你做前端)
  17. Github merge冲突
  18. 在错误的目录下 rm -rf
  19. “My code works, I don’t know why”(这句话不需要翻译了)
  20. 开会,开会,开会……作为程序员让我去死吧

那么,你的噩梦又是什么呢?

程序员最恐怖的梦魇是什么?相关推荐

  1. 阿里HR有多敬业,Python程序员:恐怖,晚上11点接到阿里HR面试电话

    晚上11点你在做什么?想必大多数养身派已经入睡或者准备睡觉,习惯熬夜的夜猫子们则刷着手机网上冲浪欲罢不能.这个时间点有电话进来,要么是推销诈骗,要么是真有急事,现在还有一种可能是HR的面试电话.就有一 ...

  2. 阿里HR有多敬业,程序员:恐怖,晚上11点接到阿里面试电话

    晚上11点你在做什么?想必大多数养身派已经入睡或者准备睡觉,习惯熬夜的夜猫子们则刷着手机网上冲浪欲罢不能.这个时间点有电话进来,要么是推销诈骗,要么是真有急事,现在还有一种可能是HR的面试电话.就有一 ...

  3. 程序员最恐怖的噩梦是什么?

    这是 Quora 上的一个问题,其中 Mick 的回答获得了 13.5k 的"赞同",他是这么回忆的: 曾经有位心理学的博士雇我查一个 BUG,程序是他的一个学生写的,经常会出现奇 ...

  4. 我的csdn之做好成为一名程序员的觉悟

    刚刚开通了这个高逼格博客,首先来介绍一下本人, 我是一个大三狗学了两年多数学,编程也只接触过C++,这学期在各种与计算机有关的课上也是一脸懵逼,并且觉得自己在编程上也没有很大的造诣,但是既然选择了程序 ...

  5. 某阿里程序员女朋友吐槽男友整天玩失踪!早晨问候一声,晚上十一点才回信息!中间完全消失!阿里加班真的这么恐怖吗?...

    请点击上面 一键关注! 当大厂程序员的女朋友是什么体验?都说程序员钱多空少,没时间陪女朋友,如果是老夫老妻还好,如果处于热恋期的话,那恐怕就比较痛苦了. 一个小姐姐发帖抱怨自己的阿里男朋友:一天基本就 ...

  6. 为什么程序员找不到工作:4 个恐怖故事

    PHP88论坛»版块›学习心得›答疑解惑›为什么程序员找不到工作:4 个恐怖故事 - 为什么程序员找不到工作:4 个恐怖故事 我做了很长一段时间的技术招聘后,我可以向你保证,招聘过程中的随机因素和干扰 ...

  7. 另类万圣节:十三种令程序员们夜不能寐的恐怖噩梦

    21套精品Java架构师高并发高性能高可用分布式集群电商缓存性能调优设计项目教程 39阶段精品云计算大数据项目实战视频教程 互联网技术(java框架.分布式.集群)干货视频大全 200本经典编程相关书 ...

  8. 程序员述说阿里HR的恐怖:晚上11点接到面试电话

    晚上11点你在做什么? 想必大多数养身派已经入睡或者准备睡觉,习惯熬夜的夜猫子们则刷着手机网上冲浪欲罢不能.这个时间点有电话进来,要么是推销诈骗,要么是真有急事,现在还有一种可能是HR的面试电话.就有 ...

  9. 某一个物种能够在 1 分钟之内干掉资深程序员...网友称:恐怖如斯!

    程序员这个物种绝对都是些饱含热情,高智商,并且具有广阔胸怀的人 你看他们虽然很苦逼却可以毫无压力自嘲, 程序员的段子可谓是笑话界中的一朵奇葩之花, 这些笑话不仅可以让程序员在枯燥的生活中自娱自乐, 更 ...

最新文章

  1. 详细解读Volley(二)—— ImageRequest Request简介
  2. SAP用户权限控制大解析及权限进阶分析
  3. Win10光驱不见了
  4. PHPstudy新版小P面板进行设置版本
  5. Django框架的整合
  6. 模拟赛-20190228-随机数(random)
  7. 趣挨踢 | 关于遗留代码的那些事儿
  8. 学习笔记_vnpy实战培训day02
  9. 迈特斯机器人_WIE-R红外热像视频内窥镜
  10. 【2015-18年腾讯招聘】腾讯产品策划类笔试面试题整理
  11. php搭建聊天室,php聊天室_用PHP MySQL搭建聊天室
  12. 华为认证IE太难,先考IP好找工作吗?
  13. android自动照相机2.0,Nano Camera
  14. oracle定时器每天下午6点_强力巨彩冠名!6月23日下午15点直播抢先看
  15. 每日一篇系列---CSS3实现下雨动效
  16. Maya菜单中英文对照表(一)
  17. 用MDT 2012为企业部署windows 7(十)--制作windows 7标准模板机
  18. K8S建立ipv6集群
  19. 计算机专业押韵口号16字,最牛班级口号霸气押韵16字
  20. filter过滤函数的使用

热门文章

  1. 新版的友盟统计的坑(9.1.0版)
  2. 牛码宝宝 - Sprint collection
  3. 【WebGL】简单入门教程
  4. 记住了啊!房子千万不要这样装修!
  5. 建站WordPress
  6. 增长黑盒给你推荐10本书:学习增长,提升认知
  7. functools模块之update_wrapper、wraps功能
  8. 怎么开发一个QQ机器人
  9. 女性创业者的自述:创业这一年学到的10大心得
  10. 更改Firefox浏览器默认播放程序的方法