美文网首页
记录一次神奇的查bug经历

记录一次神奇的查bug经历

作者: 踏雪2017 | 来源:发表于2017-08-03 15:01 被阅读0次

    这个事情其实已经过去有几个月,但是觉得现在很想还是觉得很神奇就记录下。

    事情是这样,项目是C++开发的,沿用的另一个平台的内容作了移动端适配就是用到了IOS上,所以可以理解为我对这些代码很不熟,毕竟几百万行的代码都每个逻辑都清楚的大概整个公司也没几个。某个运行xcode时发现崩溃,而且每次崩溃的代码地方都不一样。崩溃提示倒是都差不多,类似error for object 0x6100004459d0: pointer being freed was not allocated这个。以为多年C++经验当然可以一眼看出,这是C++里最经常出现的内存错误doublefree了。可是每次都崩在不一样的地方,要找到是哪个对象出了问题还真是很困难。

    百度之后发现了malloc_history这个命令,可以列出某个地址的malloc历史,通过分析终于发现原因。说来也是蛮搞笑的,居然是因为有个vecotor对象需要做序列化,然后写这段代码的人居然直接传了vector这个对象的内存拷贝进去。然后再另一个地方在将这段数据读出来后直接强转。仔细想想,vector是一个类似数组的东西,那么在它的实现中必然会有一个成员属性指向一片内存用来说明对象存放的地址。由于这个vector对象是一个栈对象,在序列化之后肯定就释放了,那么那片用来存放对象的内容也必然释放了。但是在另一个地方反序列的时候再次释放的时候必然就会导致double free了。

    相关文章

      网友评论

          本文标题:记录一次神奇的查bug经历

          本文链接:https://www.haomeiwen.com/subject/gyjplxtx.html