2008-05-27

程序随笔 - 5

有个棘手的bug,昨天鼓捣了一天没搞定,而一向灵光的``睡眠大法''也没有让我在梦里得到答案。但早晨刚来时灵光乍现,很快便root-cause了,根本原因也是一个竞态,fix也不难。回头看看这个过程却挺有意思。

这个bug至今只能在物理机上重现,但是用strace,GDB或者valgrind跟踪时则一切OK,而且下次再跑的时候一切完全``康复'',让人觉得分外诡异。幸运的是,我刚开始就加入了backtrace功能,在segfault的时候能看见堆栈的call trace,而不至于一筹莫展、无从下手。

早晨又仔细观察了一下call trace,多看了两眼#10 frame之外的信息(以前我基本只看最近的十个frame),接着便是如醍醐灌顶般的顿悟。这个bug的难处在于重现的概率很低,现场很容易被破坏,并且日志和core dump都让人很困惑 -- 再次诅咒一下多线程。

提交了补丁,顺手又fix了一个P3的bug,还剩下两个P4,感觉松了一口气。

标签:

0 Comments:

发表评论

<< Home