一次随机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理所当然地转到我这。
接着,就是我开始中间件了。中间件的环境比较复杂,涉及到多层,和多个组件。如果一个个排查,很费时间。于是,我采用了若干的专门调式内存越界的工具。
我的最难忘的一个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理所当然地转到我这。
接着,就是我开始中间件了。中间件的环境比较复杂,涉及到多层,和多个组件。如果一个个排查,很费时间。于是,我采用了若干的专门调式内存越界的工具。
相关文章推荐
- 【软件测试_hw1】记一次debug的经历
- 软件测试(一) 近期的一次debug的经历
- 一次难忘的ASP.NET DEBUG经历,按钮不能提交
- 一次DEBUG经历
- 用DELL的一次DEBUG惨痛经历(两天啊)
- 一次因“CST”时区协商问题导致数据库时间戳错误的 debug 经历
- 记录一次iis发布的经历<compilation debug="true" targetFramework="4.0">报错,默认画面不起作用
- 一次Debug经历
- [Navicat for Mysql] Error 1452 一次神器的debug经历
- 记一次debug经历,基础的重要性
- 一次分布式架构cms系统页面静态化模块开发经历
- 教你 Debug 的正确姿势——记一次 CoreMotion 的 Crash
- UWP 记一次WTS 和 UCT翻车经历
- 一次购物经历和英语不好闹出的一个笑话
- 一次痛苦的真实经历——感慨国产软件的质量
- 一次完整的HTTP请求所经历的7个步骤
- 一次排除异常的经历
- 一次安装星际译王的经历