专利名称:内存重复释放的定位方法和系统的制作方法
技术领域:
本发明涉及内存使用技术,尤其涉及一种内存重复释放的定位 方法和系统。
背景技术:
现在的软件系统有的非常庞大,代码动辄上百万行。而在这些 系统中,由于数据关系复杂,经常会一个指针存放在多个地方,且 每个指针都可能有多个流程会进行释放。 一个正确的系统,应该保 证, 一块被申请的内存,不管有多少个指针指向它,都只能被释放 一次。
但在实际系统中,由于使用复杂,经常会由于异常流程导致内 存重复释放。为了定位重复释放问题, 一种经常采用的方法是在检 测到重复释放后打印当前运行环境,通过当前环境发现是哪个指针 释放出错。这种方法对单个指针重复释放的检测比较有效。但一旦
多个指针指向同一块内存且多个指针同时发生释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日
发明者傅红燕, 叶媲书 申请人:中兴通讯股份有限公司