阅读更多

1顶
1踩

非技术

原创新闻 程序员最恐怖的梦魇是什么?

2015-12-03 10:25 by 副主编 mengyidan1988 评论(1) 有6159人浏览



这是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接入。终于,这件事引起了校方注意。

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

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

那么,你的噩梦又是什么呢?
  • 大小: 526.2 KB
来自: 极客头条
1
1
评论 共 1 条 请登录后发表评论
1 楼 ray_linn 2015-12-07 12:37
为啥不用个类似 Filemonitor的工具?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 欧洲杯

    最后一次晚上爬起来看球,欧洲杯终于结束了。 比赛很沉闷,唯一的收获是:奇迹终于发生了。 人生的奇迹呢?!

  • 程序员最恐怖的梦魇

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

  • 程序员天生就怪怪的么?

    我最近阅读了 Eric Spiegel 在 Slashdot上写的一篇博客,他提出了这么一个疑问:“软件开发者/程序员天生就怪怪的么?”我仔细地想了想,然后发现每个在IT领域工作的人都多少有点怪异。所以我在这里附议一下Eric的...

  • 饭谈:失眠,还有梦魇,第二天要上班应该怎么办?

    各位晚上好,最近几大粉丝群都不约而同的讨论起晚上失眠怎么治疗的这件事,其实对于我们这种工作压力大的程序员来说,失眠,梦魇都是常事。        看了眼公众号,发现半夜...

  • 程序员的五种不同寻常的特质

    程序员身上有很多特质,用通俗点的话说,是“易黑体质”,但同时优秀程序员也有很多体质。因此,如果你认为自己缺少下面的某些品质,千万别往心里去。不是一时兴起才来探讨这些,其中的很多迹象来自于对其他程序猿的...

  • 程序员讨论《黑客帝国》(一)真实与虚拟

    大概大家小时候都有梦魇的经历,一旦发烧或者特别累,就会哭闹,脑海里会出来各种恐怖但又说不清的东西,无论如何就是要起床去“做什么”,父母怎么压都压不住。让我印象最深刻的是98年我和父母爬完庐山,在庐山疗养...

  • 程序员如何进行用户界面设计

    程序员设计的用户界面,其实大多数并不是一个好的界面,很多人写代码时,以为这样的功能比较强大应该加上去,那样的接口比较灵活应该加上去,可是往往到头来用户只用其中的一点功能,并且会有很多用户认为很难懂、很...

  • Lisp真的是屠龙之技吗?

    老人看透了他的心思,犀利的目光直视他漆黑的眸子:“这就是所谓最伟大的程序员吗?” “我不必懂得机器!”他梗着脖子,“我甚至不必懂得机器语言,我不喜欢粗陋生硬的二进制。” “跪下!”老人在背后狠狠地踢...

  • 大龄非专业程序员的觉悟:出来混,迟早要还的,现在觉得要学的东西越来越多了!

    最恐怖的是这些东西不光我能学,稍微基础好点的新人,他们也能学,甚至还比我学得快,我觉得我随时都有被换掉的可能性,即使我经验再丰富,如果在项目中用不到,那就不能完全体现我的价值,这让我觉得自己跟新人比...

  • 今时今日,C还适合当下之所需么?

    它不仅仅运行时是最快的,其内存使用与启动时间也是效率最高的。如果需要在空间与时间上进行折衷,那么C并不会对你隐藏任何细节信息,我们可以很容易地做出估计”。 更快的开发周期 ——“对于开发者效率与生产力来...

  • 人力资源经理绩效考核表.xls

    人力资源经理绩效考核表

  • 智慧环卫管理平台建设方案Word(211页).docx

    一、智慧环卫管理平台的建设背景与目标 智慧环卫管理平台的建设源于对环卫管理全面升级的需求。当前,城管局已拥有139辆配备车载GPS系统、摄像头和油耗传感器的环卫车辆,但环卫人员尚未配备智能移动终端,公厕也缺乏信息化系统和智能终端设备。为了提升环卫作业效率、实现精细化管理并节省开支,智慧环卫管理平台应运而生。该平台旨在通过信息化技术和软硬件设备,如车载智能终端和环卫手机App,实时了解环卫人员、车辆的工作状态、信息和历史记录,使环卫作业管理透明化、精细化。同时,平台还期望通过数据模型搭建和数据研读,实现更合理的环卫动态资源配置,为环卫工作的科学、健康、持续发展提供决策支持。 二、智慧环卫管理平台的建设内容与功能 智慧环卫管理平台的建设内容包括运行机制体制建设、业务流程设计、智慧公厕系统建设、网络建设、主机和储存平台需求、平台运维管理体系、硬件标准规范体系以及考核评价体系等多个方面。其中,智慧公厕系统建设尤为关键,它能实时监控公厕运行状态,保障公厕的清洁和正常运行。平台建设还充分利用了现有的电子政务网络资源,并考虑了有线和无线网络的需求。在功能上,平台通过普查、整合等手段全面收集环卫车辆、企业、人员、设施、设备等数据,建立智慧环卫基础数据库。利用智能传感、卫星定位等技术实现环卫作业的在线监管和远程监控,实现对道路、公共场所等的作业状况和卫生状况的全面监管。此外,平台还建立了环卫作业网格化管理责任机制,实现从作业过程到结果的全面监管,科学评价区域、部门、单位和人员的作业效果。 三、智慧环卫管理平台的效益与风险规避 智慧环卫管理平台的建设将带来显著的环境、经济和管理效益。环境方面,它将有力推进环境卫生监管服务工作,改善环境卫生状况,为人民群众创造更加清洁、卫生的工作和生活环境。经济方面,通过智慧化监管,大大降低了传统管理手段的成本,提高了监管的准确性和效率。管理方面,平台能够追踪溯源市民反映的问题,如公厕异味、渣土车辆抛洒等,并找到相应的责任单位进行处置,防止类似事件再次发生。同时,平台还拥有强大的预警机制功能,能够在很多环卫问题尚未出现前进行处置。然而,平台建设也面临一定的风险,如部门协调、配合问题,建设单位选择风险以及不可预测的自然灾害等。为了规避这些风险,需要加强领导、统一思想,选择优秀的系统集成商承接项目建设,并做好计算机和应用系统的培训工作。同时,也要注意标准制定工作和相关法律法规的制定工作,以保证系统建设完成后能够真正为环卫管理工作带来便利。

  • apache-parent-10-14.el7.x64-86.rpm.tar.gz

    1、文件内容:apache-parent-10-14.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-parent-10-14.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

  • 用于卫星通信的CTS天线

    用于卫星通信的圆极化CTS天线研究

  • 人事档案登记及查询系统.xlsx

    人事档案登记及查询系统

  • 12 -防损部经理绩效考核表1.xlsx

    12 -防损部经理绩效考核表1

  • 泰尔指数模型stata全流程代码+数据+文献(数据权威)

    ## 一、泰尔指数模型stata全流程代码+数据+文献 参考C刊《农业经济问题》朱红根(2023)老师的做法,用泰尔指数是衡量个人或地区之间收入差距的重要指标,本文利用泰尔指数分析中国区域内和区域间数字乡村发展水平的差异,测算了全国总体差异、区域内差异、区域间差异以及相关贡献率。此资料包括stata全流程代码、案例数据、参考文献,用excel计算有标注有过程 ,并且参照文献讲的。 ## 二、2005-2021年城乡收入差距与泰尔指数:原始数据+测算结果 泰尔熵标准(Theil’s entropy measure)或者泰尔指数(Theil index)是衡量个人之间或者地区间收入差距(或者称不平等度)的指标。又称泰尔系数或锡尔指数,但我还是习惯叫泰尔指数。Theil指数用来表示区域经济差异状况,数值越大则差异程度越大。 数据名称:城乡收入差距与泰尔指数(原始数据+测算) 数据年份:2005-2021年 指标变量:泰尔指数、城镇收入占农村收入之比、城镇居民人均可支配收入、农村居民人均可支配收入、乡村人口、全体居民人均可支配收入、城镇人口、年末常住人口 测算公式:

  • 34 -配送部经理绩效考核表1.xlsx

    34 -配送部经理绩效考核表1

  • [2024最新更新]全国城投公司数据大全(数据权威)

    1.资料名称:2021-1998年城投公司数据大全 2.数据指标:序号、公司名称、区域、城投评分、省内排名、最新主体评级、行政等级、 股东背景、股权关系、平台重要性、城投口径、实控人、 总资产(亿元)、 货币资金(亿元)、土地资产(亿元)、受限资产(亿元)、应收账款(亿元) 应收类款项政府占比(%)、营业收入(亿元)、公益性&准公益性主营占比(%)、归母净利润(亿元)、政府补助(亿元)、总资产报酬率(%)、有息债务(亿元)、 短期债务(亿元)、借款(亿元)、债券余额(亿元)、私募债占比(%)、 非标融资(亿元)、资产负债率(%)、债务资本化比率(%) 对外担保比例(%)、EBITDA/利息(倍)、EBITDA全部债务比(%)、授信余额(亿元)、 最新报告期 、申万行业 城投公司是城市建设投资公司的简称,是全国各大城市政府投资融资平台,起源于1991年,承担相应的政府职能,是特殊市场经营体。 此类城投公司大多是不具备盈利能力的,属于事业单位或者国有独资公司性质,他们是通过政府补贴的方式实现盈利,属于带有政府性质的特殊市场经营体。

Global site tag (gtag.js) - Google Analytics