您的位置:首页 > 其它

一次随机crash的debug经历

2010-10-27 13:27 225 查看
Bug,谁都改过,不过每个开发者认为的自己经历的最最恶心的bug恐怕都不是一样的。 ---segments

我的最难忘的一个bug是一个随机crash的问题。说到难忘,一个原因是这个bug定位难度很大,一个原因是和相关的人沟通交流的难度,最后一个原因是在那段时间生了一场病。

crash了,并且crash的地点每次都不一样。最初是一个测试应用的MM发现的这个问题,测试这个应用若干次后,就发生了。但是具体多少次?没有规律。作了哪些相同的操作导致的crash?好像也没有规律。但是,大部分的crash地点都是malloc和free的被调用地方。crash的时候给出的打印信息也少的很:

*** glibc detected *** test_loop : corrupted double-linked list: 0x00020b60 ***

但是,这样的crash和系统剩余内存多少没有太大的关系。大的方向是,系统内存比较少的时候,crash更容易发生。但是这个也不是绝对的。我大致猜测,这个问题应该和内存越界有关。于是开始了这段痛苦的debug过程,呵呵。

首先,这个bug最初是挂到了写应用的MM那边。大致介绍下情况。这是个录音的应用,需要把外界的声音录制成AAC编码的文件。应用程序调用了中间件的接口。做应用的MM首先把调用到中间件的地方全部屏蔽掉了。请负责测试的MM做了大致10000个事件的自动化测试,结果没有发现crash。这个bug理所当然地转到我这。

接着,就是我开始中间件了。中间件的环境比较复杂,涉及到多层,和多个组件。如果一个个排查,很费时间。于是,我采用了若干的专门调式内存越界的工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: