内存重复释放的定位方法和系统的制作方法

文档序号:6563137阅读:165来源:国知局
专利名称:内存重复释放的定位方法和系统的制作方法
技术领域
本发明涉及内存使用技术,尤其涉及一种内存重复释放的定位 方法和系统。
背景技术
现在的软件系统有的非常庞大,代码动辄上百万行。而在这些 系统中,由于数据关系复杂,经常会一个指针存放在多个地方,且 每个指针都可能有多个流程会进行释放。 一个正确的系统,应该保 证, 一块被申请的内存,不管有多少个指针指向它,都只能被释放 一次。
但在实际系统中,由于使用复杂,经常会由于异常流程导致内 存重复释放。为了定位重复释放问题, 一种经常采用的方法是在检 测到重复释放后打印当前运行环境,通过当前环境发现是哪个指针 释放出错。这种方法对单个指针重复释放的检测比较有效。但一旦
多个指针指向同一块内存且多个指针同时发生释i文,该方法就无法 准确知道重复释放的错误根源,不知道是怎样的业务流程导致重复 释放。为了定位问题,不得不通过大量走读代码或者在释放流程处 打点进行复现,非常耗费时间和精力。
因此,需要一种针对内存重复释放的定位技术方案,以在多个 流程重复释放内存的情况下快速定位错误根源。

发明内容
本发明的主要目的在于提供一种内存重复释放的定位方法和 系统,用于克月良i见有才支术中的无法有效发J见多个流禾呈释方文同 一个内 存的错误,导致多个流程在异常情况下重复释放内存,不得不耗费 大量人力去复现或者走读代码来发现错误所在的问题。
为了实现上述目的,根据本发明的第一方面,本发明提供了一
种内存重复释》文的定位方法。定位方法包括以下步骤
步骤S102,申"i青业务内存,并申i青与业务内存相关的关联内存;
步骤S104,在释放业务内存之前或同时,获得关联内存的地址;
步骤S106,检测是否为重复释放,如果是重复释放,则进行至 步骤S108,如果不是重复释》文,则进行至步骤S110;
步骤S108,将当前运行环境记录到指定记录区,并将关联内存 的内容转储到指定记录区,通过分析指定记录区的记录,进行重复
释放定位;
步骤SllO,将当前运行环境记录到关联内存中。
可选地,在步骤S102中,通过表记录业务内存的地址和关联 内存的地址。在步骤S104中,通过查表,获得关联内存的地址。
运行环境包括调用栈或任务信息或各种信息的组合。指定记录 区包括日志文件、屏幕、或内存区。
为了实现上述目的,根据本发明的第二方面,本发明提供了一 种内存重复释放的定位系统。定位系统包括申请模块,用于申请 业务内存,以及申请与业务内存相关的关联内存;释放模块,用于
释方文业务内存,以及获4f关联内存的i也址;;险测冲莫块,用于4企测释
放模块进行的业务内存的释放是否为重复释放;处理模块,用于在 检测模块检测出释放是重复释放时,将当前运行环境记录到指定记 录区,并将关联内存的内容转储到指定记录区,以及在检测模块检 测出释放不是重复释放时,将当前运行环境记录到述关联内存中。
可选地,申请模块通过表记录业务内存的地址和关联内存的地 址。释放模块通过查表获得关联内存的地址。
运行环境包括调用栈或任务信息或各种信息的组合。指定记录 区包括日志文件、屏幕、或内存区。
通过上述技术方案,本发明在发生内存重复释放时,可以快速 定位错误根源,避免了人工走读代码或打点复现,极大的提高了排 错效率。
附困说明
此处所i兌明的附图用来提供对本发明的进一步理解,构成本申 请的一部分,本发明的示意性实施例及其说明用于解释本发明,并
不构成对本发明的不当限定。在附图中


图1是根据本发明的内存重复释放的定位方法的流程图; 图2是根据本发明的内存重复释放的定位系统的框图; 图3是#4居本发明实施例的内存释放时的流程图。 务本实施方式
下面将参考附图详细i兌明本发明。
参照图1,冲艮才居本发明的内存重复释方文的定^f立方法包才舌以下步

步骤S102,申请业务内存,并申请与业务内存相关的关联内存。 通过表记录业务内存的地址和关联内存的地址。 步骤S104,在释放业务内存之前或同时,获得关联内存的地址。 通过查表,获得关联内存的地址。
步骤S106,检测是否为重复释放,如果是重复释放,则进行至 步骤S108,如果不是重复释力文,则进4于至步骤SllO。
步骤S108,将当前运行环境记录到指定记录区,并将关联内存 的内容转储到指定记录区,通过分析指定记录区的记录,进行重复
释方文定位。
运行环境包括调用栈或任务信息或各种信息的组合。
指定记录区包括日志文件、屏幕、或内存区。
步骤SllO,将当前运^f亍环境记录到关联内存中。
参照图2,根据本发明的内存重复释放的定位系统10包括申 请模块20,用于申请业务内存,以及申请与业务内存相关的关联内 存;释放模块30,用于释放业务内存,以及获得关联内存的地址; 检测模块40,用于检测释放模块30进行的业务内存的释放是否为 重复释放;处理模块50,用于在检测模块40检测出释放是重复释 放时,将当前运行环境记录到指定记录区,并将关联内存的内容转 储到指定记录区,以及在检测模块40检测出释放不是重复释放时, 将当前运行环境记录到述关联内存中。
可选地,申请冲莫块20通过表记录业务内存的地址和关联内存 的地址。释放模块30通过查表获得关联内存的地址。
运行环境包括调用栈或任务信息或各种信息的组合。指定记录 区包括日志文件、屏幕、或内存区。
本发明涉及一种内存重复释放定位方法,尤其适用于在软件系 统4艮庞大,无法有效的通过走读代码来发现重复释i文内存流程的情况。
本发明所述的定位方法包括以下组成部分
1、 进行内存申请;
2、 释放内存;
3、 在释放内存时,同时检测内存是否重复释i文; 同时还包括如下组成部分
4、 在申请内存时,同时申请一片关联内存;
5、 释放内存时,把当前流程记录进和所释放内存相关联的关 联内存中;
6、 当检测到重复释放时,把当前流程记录到指定地方(可以 直接输出到屏幕,也可以记录到日志文件中),同时把重复释放的 内存的关联内存内容转储到指定的地方。
下面描述具体实施过程。
1、 内存申i青4妾口在为业务申i青内存时,同时获得一片專九迹i己 录的关联内存。同时用表记录业务内存地址和关联内存地址。
2、 当业务调用释方iU妾口时,通过查表,获得和所释》文的业务 内存相关联的关联内存地址。
3、 如图3所示,释放内存时,检测是否重复释放。如果没重 复释放,则把释方文时的程序运行环境记录在第2步中获得的关联内 存中。运行环境可以是调用栈或任务信息或各种信息的组合。
4、 如图3所示,释放内存时,检测是否重复释放内存。如果 发现重复释方文,则记录当前运4亍环境到指定记录区(指定记录区可 以是文件,或者直接输出到屏幕,或者是指定的内存区),同时把 第2步获得的关联内存的内容转储到指定的记录区。
5、 在检测到重复释放后,通过分析指定记录区的记录结果, 就可以快速定位重复释》文的流程错误。
以上所述仅为本发明的优选实施例而已,并不用于限制本发 明,对于本领域的技术人员来说,本发明可以有各种更改和变化。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进 等,均应包含在本发明的保护范围之内。
权利要求
1.一种内存重复释放的定位方法,其特征在于,包括以下步骤步骤S102,申请业务内存,并申请与所述业务内存相关的关联内存;步骤S104,在释放所述业务内存之前或同时,获得所述关联内存的地址;步骤S106,检测是否为重复释放,如果是重复释放,则进行至步骤S108,如果不是重复释放,则进行至步骤S110;步骤S108,将当前运行环境记录到指定记录区,并将所述关联内存的内容转储到所述指定记录区,通过分析所述指定记录区的记录,进行重复释放定位;步骤S110,将当前运行环境记录到所述关联内存中。
2. 根据权利要求1所述的定位方法,其特征在于,在步骤S102 中,通过表记录所述业务内存的地址和所述关联内存的地址。
3. 根据权利要求2所述的定位方法,其特征在于,在步骤S104 中,通过查表,获得所述关联内存的地址。
4. 根据权利要求1所述的定位方法,其特征在于,所述运行环境 包括调用栈或任务信息或各种信息的组合。
5. 根据权利要求1所述的定位方法,其特征在于,所述指定记录 区包括日志文件、屏幕、或内存区。
6. —种内存重复释方文的定位系统,其特征在于,包括申请模块,用于申请业务内存,以及申请与所述业务内 存相关的关联内存;释放模块,用于释放所述业务内存,以及获得所述关联内存的i也址;检测模块,用于检测所述释放模块进行的所述业务内存 的释放是否为重复释放;处理模块,用于在所述检测模块检测出所述释放是重复 释放时,将当前运行环境记录到指定记录区,并将所述关联内 存的内容转储到所述指定记录区,以及在所述检测模块检测出 所述释放不是重复释放时,将当前运行环境记录到所述关联内 存中。
7. 根据权利要求6所述的定位系统,其特征在于,所述申请模块 通过表记录所述业务内存的地址和所述关联内存的地址。
8. 根据权利要求7所述的定位系统,其特征在于,所述释放模块 通过查表获得所述关联内存的地址。
9. 根据权利要求6所述的定位系统,其特征在于,所述运行环境 包括调用栈或任务信息或各种信息的组合。
10. 根据权利要求6所述的定位系统,其特征在于,所述指定记录 区包括日志文件、屏幕、或内存区。
全文摘要
本发明公开了一种内存重复释放的定位方法和系统。申请业务内存,并申请与业务内存相关的关联内存;在释放业务内存之前或同时,获得关联内存的地址;检测是否为重复释放,如果是重复释放,则将当前运行环境记录到指定记录区,并将关联内存的内容转储到指定记录区,通过分析指定记录区的记录,进行重复释放定位,如果不是重复释放,则将当前运行环境记录到关联内存中。本发明在发生内存重复释放时,可以快速定位错误根源,避免了人工走读代码或打点复现,极大的提高了排错效率。
文档编号G06F11/36GK101174241SQ20061015046
公开日2008年5月7日 申请日期2006年10月31日 优先权日2006年10月31日
发明者傅红燕, 叶媲书 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1