首先作为实习生考试这两个题目非常不合适。
但是这两个题目恰恰是真实应用中经常出现,而且非常难找的两种bug,一个是多核多线程导致的难以重现的bug,还有一个是有可能的memory corruption。
俗话说,工欲善其事,必先利其器。我们一开始盖一个木头房子,有斧子锯子就够了,但是当我们要盖摩天大楼的时候,你问我用斧子锯子怎么盖,那就是玩我了。
好了下面介绍一下终极大杀器——Green Hills MULTI IDE with TimeMachine。
第一个问题的核心在于难以重现,这个问题在多核多线程的情况下非常常见,有一个极端的corner case导致的错误并且这个错误只有在某些不可控因素恰好遇到的时候会出现(比如两个线程的某种运行顺序)。当我们跳出圈子,扔掉debug知识和经验,想到的第一点是什么?如果我能重现这个bug不就简单了?如果我能完美重现这个bug,就像拍视频一样,然后可以回去一帧一帧地回放,观察程序运行过程中的每个细节,这bug就是个正常的bug而已。
TimeMa