[发明专利]一种内存重复释放错误检测方法有效
申请号: | 201710467495.2 | 申请日: | 2017-06-20 |
公开(公告)号: | CN107220182B | 公开(公告)日: | 2019-07-26 |
发明(设计)人: | 李盼;张开禾;卢向雨;王冲;李祥;崔利东;韩乐然 | 申请(专利权)人: | 中国电子科技集团公司第五十四研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 河北东尚律师事务所 13124 | 代理人: | 王文庆 |
地址: | 050081 河北省石家*** | 国省代码: | 河北;13 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种内存重复释放错误检测方法,属于软件工程技术领域。本方法包括建立内存池和操作队列池、将被调试程序对内存池中内存块的每一次申请或释放操作记录到该内存块所对应的操作队列中、判断是否明显重复释放、根据操作队列所记录的信息在程序代码中定位导致程序错误的代码位置等步骤。本发明方法严谨、简洁而紧凑,并且便于实现,尤其是采用了内存池和操作队列池这种数据结构为内存调用排错提供了坚实基础,相对于现有技术能够更加简单高效地定位代码中引起内存重复释放错误的位置,是对现有代码排查调试技术的一种重要改进。 | ||
搜索关键词: | 一种 内存 重复 释放 错误 检测 方法 | ||
【主权项】:
1.一种内存重复释放错误检测方法,其特征在于,包括以下步骤:(1)建立内存池和操作队列池;操作队列池中的操作队列与内存池中的内存块一一对应,每一个内存块包括内存块标识字段、占用状态字段和存储数据字段,操作队列中的每个元素包括操作类型字段、代码文件标识字段、代码行号字段和操作时间字段;(2)将被调试程序对内存池中内存块的每一次申请或释放操作记录到该内存块所对应的操作队列中;(3)对于每一次内存操作,若该次操作的类型为释放内存,且该次操作所对应的内存块的占用状态字段为未占用,则引发人为系统崩溃;(4)当系统发生自然崩溃或人为崩溃时,根据崩溃现场确定引起系统崩溃的内存块,从操作队列池中查找该内存块所对应的操作队列,根据该操作队列所记录的信息在程序代码中定位导致程序错误的代码位置;所述自然崩溃是指,被调试程序的不同模块之间由于存在潜在的逻辑错误,导致一个模块申请的内存被另一个模块释放,此时当申请内存的模块再次读取该内存块时所导致的系统崩溃;所述步骤(4)中根据操作队列所记录的信息在程序代码中定位导致程序错误的代码位置的具体方式为:(401)将操作队列中的元素顺序反转并另行存储,形成原操作队列的镜像操作队列;(402)从当前镜像操作队列的头部开始逐一取出元素,直到取出操作类型为释放的元素;(403)从当前镜像操作队列的头部再取出一个元素,判断该元素的操作类型,若操作类型也为释放,则定位两次连续释放操作所对应的代码位置,结束检测;若操作类型为申请,则继续后续步骤;(404)判断最后取出的两个元素的对应操作是否逻辑匹配,若匹配则重复步骤(402),否则继续后续步骤;(405)从当前镜像操作队列的头部开始向后查找第一个与当前最后一个被取出的释放元素逻辑匹配的申请元素,再从该申请元素开始向前查找最近的释放元素,判断该最近的释放元素是否与本步骤中的申请元素逻辑匹配,若是则定位本步骤中所涉两个释放元素的对应代码位置,结束检测;否则从当前镜像操作队列的头部开始逐一取出元素直至取出本步骤所述的最近的释放元素,然后重复本步骤(405)。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国电子科技集团公司第五十四研究所,未经中国电子科技集团公司第五十四研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201710467495.2/,转载请声明来源钻瓜专利网。
- 上一篇:一种异常进程定位方法、装置及系统
- 下一篇:无钥匙孔的无源电子锁驱动机构