学计算机的朋友们有时候一个错误几小时才会弄清楚，会崩溃吗?
说两个以前在华为的时候遇到的问题。 其实，在通信设备上写代码是比较困难的。举个例子，你如果在windows操作系统上写代码，解引用空指针的话会出什么问题呢？如果是win98以前的操作系统，大概率会蓝屏。winxp以后的操作系统会弹出一个消息框，提示你某某地址非法访问。 通信设备上的情况就类似于win98，你要是解引用空指针，机器就复位给你看，你要是在初始化里面解引用空指针，那么机器就变成砖给你看，那得在BIOS状态下“刷机”才能让机器复活。 当然，你要是解引用空指针，这种容易重现的bug还是很容易解决的。困难的是有些时灵时不灵的情况，比如把模块的指针放在map里面，中途还有可能去替换map里面的值，替换的时候还可能是多线程。这样的bug，有时候一周崩溃一次，有可能三个月才崩溃，还有可能一年才崩溃，具体什么时候崩溃，得看代码运行的时候有多“巧妙”。这类问题，每个组都有老专家专门坐诊，解决其起来也是得心应手。 言归正传，铺垫了那么多，说一下，我遇到的一个问题。当时，我还是一个新员工，给的交付任务非常少，完整的代码也就140行的样子，前面80行代码写完后，我就上设备验证了一下，完全ok，一点问题都没有。当我把所有代码都写好了以后再上设备，设备能够正常启动，但是我不能对设备下发任何命令，一下发，设备就崩溃了。抱着谦虚谨慎，自己最菜的心态，仔细的排查了下代码，觉得没有任何问题，再上设备验证，情况依旧。这时候，我求助了一位工作十二年的老员工，他看完代码也觉得完全ok，然后编译了个版本，换到另一台设备上，下发命令依旧崩溃。然后，他又找了另一位“老专家”来坐诊，看了一圈代码，完全ok，又编译一个版本上设备，崩溃。。。此时，激起了他两的战斗欲望，我的电脑就被他两霸占了，把我写的代码删除，上设备，运行正常。然后把我写的一部分代码改进去，运行正常。全部改进去，设备又崩了。修修改改就到了凌晨1点多，前后持续了7个小时，最后，某个“老专家”提出，我们把这个代码重写一遍，然后就照着我的逻辑重写了一遍，变量名称都复刻了一下，重新编译，运行正常。再对比一下两份代码，除了有几个换行符的差别，其余一模一样，眼看着时间太晚了，他们让我把代码备份一下，等明天了再研究，不过我备份这份代码直到我离职的时候也没有人再去研究过，也不知道具体出了什么问题，依旧是一个未解之谜。 说下另一个事。也是在开发过程中，突然发现设备会不定期的复位，这种情况，大概率就是内存问题，排查了一圈，找不到原因，问题就暂时搁置了。后来，这个复位问题时现时不现，测试那边的PL就觉得问题挺严重，上升到了产品经理那里，接下来经理就给开发一顿怼，让开发尽快解决，否则就如何扣奖金、如何发邮件通报批评。。。好吧，刚开始，开发这边也不足够重视，就随便丢给了一个组让尽快搞定，组里排查了半天，得出的结论是，我们的代码没有问题，是下发的命令的模块有问题。接下来，就把问题抛给了另外的项目组，这个项目组觉得下发的命令没有问题，是处理命令的代码有问题，又把问题给踢回来了(吐槽一下，这样的内耗非常严重)。前后踢了几个回合，没有谁占到便宜，问题又抛回给了经理，经理又把两个组的人拉起来一顿怼，最后决定让两个组联合定位。这两个组的员工都觉得，一定是对方的代码有问题，所以也没有排出最强阵容来对待，结果两天过去了，一点头绪都没有。接着，产品经理怒了，把这事直接捅到了更高的领导那里。大领导说话就是好使，马上就指名要哪几个“老专家”放下手中的活，优先解决这个复位问题。接下来的具体细节我就不太清楚了，我只知道大概五天后，我收到了一个通报表扬的邮件，“表扬xx在xxx产品复位问题中，身先士卒，用精湛的技术定位了1bit内存溢出问题”。但是这五天我是看着这位老专家怎么过来的，一个41岁的人了，天天定位问题到凌晨2点，然后在折叠床上睡到6点钟，起床又接着看代码。问题解决那天，他请假回去休息，隔了两天才又来上班。 说了那么多，我想表达的就是，真正热爱计算机技术的人，遇到问题是会激发战斗欲望，并不会崩溃。