CN100487669C - 内存重复释放的定位方法和系统 - Google Patents
内存重复释放的定位方法和系统 Download PDFInfo
- Publication number
- CN100487669C CN100487669C CNB2006101504612A CN200610150461A CN100487669C CN 100487669 C CN100487669 C CN 100487669C CN B2006101504612 A CNB2006101504612 A CN B2006101504612A CN 200610150461 A CN200610150461 A CN 200610150461A CN 100487669 C CN100487669 C CN 100487669C
- Authority
- CN
- China
- Prior art keywords
- internal memory
- discharge
- address
- memory
- release
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种内存重复释放的定位方法和系统。申请业务内存,并申请与业务内存相关的关联内存;在释放业务内存之前或同时,获得关联内存的地址;检测是否为重复释放,如果是重复释放,则将当前运行环境记录到指定记录区,并将关联内存的内容转储到指定记录区,通过分析指定记录区的记录,进行重复释放定位,如果不是重复释放,则将当前运行环境记录到关联内存中。本发明在发生内存重复释放时,可以快速定位错误根源,避免了人工走读代码或打点复现,极大的提高了排错效率。
Description
技术领域
本发明涉及内存使用技术,尤其涉及一种内存重复释放的定位方法和系统。
背景技术
现在的软件系统有的非常庞大,代码动辄上百万行。而在这些系统中,由于数据关系复杂,经常会一个指针存放在多个地方,且每个指针都可能有多个流程会进行释放。一个正确的系统,应该保证,一块被申请的内存,不管有多少个指针指向它,都只能被释放一次。
但在实际系统中,由于使用复杂,经常会由于异常流程导致内存重复释放。为了定位重复释放问题,一种经常采用的方法是在检测到重复释放后打印当前运行环境,通过当前环境发现是哪个指针释放出错。这种方法对单个指针重复释放的检测比较有效。但一旦多个指针指向同一块内存且多个指针同时发生释放,该方法就无法准确知道重复释放的错误根源,不知道是怎样的业务流程导致重复释放。为了定位问题,不得不通过大量走读代码或者在释放流程处打点进行复现,非常耗费时间和精力。
因此,需要一种针对内存重复释放的定位技术方案,以在多个流程重复释放内存的情况下快速定位错误根源。
发明内容
本发明的主要目的在于提供一种内存重复释放的定位方法和系统,用于克服现有技术中的无法有效发现多个流程释放同一个内存的错误,导致多个流程在异常情况下重复释放内存,不得不耗费大量人力去复现或者走读代码来发现错误所在的问题。
为了实现上述目的,根据本发明的第一方面,本发明提供了一种内存重复释放的定位方法。定位方法包括以下步骤:
步骤S102,申请业务内存,并申请与业务内存相关的关联内存;
步骤S104,在释放业务内存之前或同时,获得关联内存的地址;
步骤S106,检测是否为重复释放,如果是重复释放,则进行至步骤S108,如果不是重复释放,则进行至步骤S110;
步骤S108,将当前运行环境记录到指定记录区,并将关联内存的内容转储到指定记录区,通过分析指定记录区的记录,进行重复释放定位;
步骤S110,将当前运行环境记录到关联内存中。
可选地,在步骤S102中,通过表记录业务内存的地址和关联内存的地址。在步骤S104中,通过查表,获得关联内存的地址。
运行环境包括调用栈或任务信息的组合。指定记录区包括日志文件、屏幕、或内存区。
为了实现上述目的,根据本发明的第二方面,本发明提供了一种内存重复释放的定位系统。定位系统包括:申请模块,用于申请业务内存,以及申请与业务内存相关的关联内存;释放模块,用于释放业务内存,以及获得关联内存的地址;检测模块,用于检测释放模块进行的业务内存的释放是否为重复释放;处理模块,用于在检测模块检测出释放是重复释放时,将当前运行环境记录到指定记录区,并将关联内存的内容转储到指定记录区,以及在检测模块检测出释放不是重复释放时,将当前运行环境记录到述关联内存中。
可选地,申请模块通过表记录业务内存的地址和关联内存的地址。释放模块通过查表获得关联内存的地址。
运行环境包括调用栈或任务信息的组合。指定记录区包括日志文件、屏幕、或内存区。
通过上述技术方案,本发明在发生内存重复释放时,可以快速定位错误根源,避免了人工走读代码或打点复现,极大的提高了排错效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明的内存重复释放的定位方法的流程图;
图2是根据本发明的内存重复释放的定位系统的框图;
图3是根据本发明实施例的内存释放时的流程图。
具体实施方式
下面将参考附图详细说明本发明。
参照图1,根据本发明的内存重复释放的定位方法包括以下步骤:
步骤S102,申请业务内存,并申请与业务内存相关的关联内存。
通过表记录业务内存的地址和关联内存的地址。
步骤S104,在释放业务内存之前或同时,获得关联内存的地址。
通过查表,获得关联内存的地址。
步骤S106,检测是否为重复释放,如果是重复释放,则进行至步骤S108,如果不是重复释放,则进行至步骤S110。
步骤S108,将当前运行环境记录到指定记录区,并将关联内存的内容转储到指定记录区,通过分析指定记录区的记录,进行重复释放定位。
运行环境包括调用栈或任务信息或各种信息的组合。
指定记录区包括日志文件、屏幕、或内存区。
步骤S110,将当前运行环境记录到关联内存中。
参照图2,根据本发明的内存重复释放的定位系统10包括:申请模块20,用于申请业务内存,以及申请与业务内存相关的关联内存;释放模块30,用于释放业务内存,以及获得关联内存的地址;检测模块40,用于检测释放模块30进行的业务内存的释放是否为重复释放;处理模块50,用于在检测模块40检测出释放是重复释放时,将当前运行环境记录到指定记录区,并将关联内存的内容转储到指定记录区,以及在检测模块40检测出释放不是重复释放时,将当前运行环境记录到述关联内存中。
可选地,申请模块20通过表记录业务内存的地址和关联内存的地址。释放模块30通过查表获得关联内存的地址。
运行环境包括调用栈或任务信息或各种信息的组合。指定记录区包括日志文件、屏幕、或内存区。
本发明涉及一种内存重复释放定位方法,尤其适用于在软件系统很庞大,无法有效的通过走读代码来发现重复释放内存流程的情况。
本发明所述的定位方法包括以下组成部分:
1、进行内存申请;
2、释放内存;
3、在释放内存时,同时检测内存是否重复释放;
同时还包括如下组成部分:
4、在申请内存时,同时申请一片关联内存;
5、释放内存时,把当前流程记录进和所释放内存相关联的关联内存中;
6、当检测到重复释放时,把当前流程记录到指定地方(可以直接输出到屏幕,也可以记录到日志文件中),同时把重复释放的内存的关联内存内容转储到指定的地方。
下面描述具体实施过程。
1、内存申请接口在为业务申请内存时,同时获得一片轨迹记录的关联内存。同时用表记录业务内存地址和关联内存地址。
2、当业务调用释放接口时,通过查表,获得和所释放的业务内存相关联的关联内存地址。
3、如图3所示,释放内存时,检测是否重复释放。如果没重复释放,则把释放时的程序运行环境记录在第2步中获得的关联内存中。运行环境可以是调用栈或任务信息或各种信息的组合。
4、如图3所示,释放内存时,检测是否重复释放内存。如果发现重复释放,则记录当前运行环境到指定记录区(指定记录区可以是文件,或者直接输出到屏幕,或者是指定的内存区),同时把第2步获得的关联内存的内容转储到指定的记录区。
5、在检测到重复释放后,通过分析指定记录区的记录结果,就可以快速定位重复释放的流程错误。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种内存重复释放的定位方法,其特征在于,包括以下步骤:
步骤S102,申请业务内存,并申请与所述业务内存相关的关联内存;
步骤S104,在释放所述业务内存之前或同时,获得所述关联内存的地址;
步骤S106,检测是否为重复释放,如果是重复释放,则进行至步骤S108,如果不是重复释放,则进行至步骤S110;
步骤S108,将当前运行环境记录到指定记录区,并将所述关联内存的内容转储到所述指定记录区,通过分析所述指定记录区的记录,进行重复释放定位;
步骤S110,将当前运行环境记录到所述关联内存中。
2.根据权利要求1所述的定位方法,其特征在于,在步骤S102中,通过表记录所述业务内存的地址和所述关联内存的地址。
3.根据权利要求2所述的定位方法,其特征在于,在步骤S104中,通过查表,获得所述关联内存的地址。
4.根据权利要求1所述的定位方法,其特征在于,所述运行环境包括调用栈或任务信息的组合。
5.根据权利要求1所述的定位方法,其特征在于,所述指定记录区包括日志文件、屏幕、或内存区。
6.一种内存重复释放的定位系统,其特征在于,包括:
申请模块,用于申请业务内存,以及申请与所述业务内存相关的关联内存;
释放模块,用于释放所述业务内存,以及获得所述关联内存的地址;
检测模块,用于检测所述释放模块进行的所述业务内存的释放是否为重复释放;
处理模块,用于在所述检测模块检测出所述释放是重复释放时,将当前运行环境记录到指定记录区,并将所述关联内存的内容转储到所述指定记录区,以及在所述检测模块检测出所述释放不是重复释放时,将当前运行环境记录到所述关联内存中。
7.根据权利要求6所述的定位系统,其特征在于,所述申请模块通过表记录所述业务内存的地址和所述关联内存的地址。
8.根据权利要求7所述的定位系统,其特征在于,所述释放模块通过查表获得所述关联内存的地址。
9.根据权利要求6所述的定位系统,其特征在于,所述运行环境包括调用栈或任务信息的组合。
10.根据权利要求6所述的定位系统,其特征在于,所述指定记录区包括日志文件、屏幕、或内存区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101504612A CN100487669C (zh) | 2006-10-31 | 2006-10-31 | 内存重复释放的定位方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101504612A CN100487669C (zh) | 2006-10-31 | 2006-10-31 | 内存重复释放的定位方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101174241A CN101174241A (zh) | 2008-05-07 |
CN100487669C true CN100487669C (zh) | 2009-05-13 |
Family
ID=39422763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101504612A Expired - Fee Related CN100487669C (zh) | 2006-10-31 | 2006-10-31 | 内存重复释放的定位方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100487669C (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102866951B (zh) * | 2012-09-21 | 2015-07-15 | 武汉烽火网络有限责任公司 | 嵌入式系统内存越界错误快速定位方法 |
CN107220182B (zh) * | 2017-06-20 | 2019-07-26 | 中国电子科技集团公司第五十四研究所 | 一种内存重复释放错误检测方法 |
CN113485846A (zh) * | 2021-08-02 | 2021-10-08 | 北京字节跳动网络技术有限公司 | 一种内存处理方法及装置 |
-
2006
- 2006-10-31 CN CNB2006101504612A patent/CN100487669C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101174241A (zh) | 2008-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109240886B (zh) | 异常处理方法、装置、计算机设备以及存储介质 | |
CN110489699B (zh) | 一种异步数据采集方法及系统 | |
CN103019923B (zh) | 模拟点击测试的方法及系统 | |
US8028194B2 (en) | Sequencing technique to account for a clock error in a backup system | |
EP2357857A1 (en) | Method and apparatus for generating phone bill | |
CN110008129B (zh) | 一种存储定时快照的可靠性测试方法、装置及设备 | |
CN109710439B (zh) | 故障处理方法和装置 | |
CN105159819B (zh) | 一种记录内核异常栈及调试信息的方法及系统 | |
CN108984332A (zh) | 一种定位服务器宕机故障的装置及方法 | |
CN1503130A (zh) | 虚拟层系统中的故障跟踪的方法和设备 | |
CN100392606C (zh) | 一种定位虚拟操作系统内存泄漏的方法 | |
CN101127590A (zh) | 一种对单板运行状态进行数据备份的方法及其装置 | |
CN106682162A (zh) | 日志管理方法及装置 | |
CN100487669C (zh) | 内存重复释放的定位方法和系统 | |
CN110134538B (zh) | 快速定位问题日志的方法、装置、介质和电子设备 | |
CN111782431A (zh) | 一种异常的处理方法、装置、终端及存储介质 | |
CN111552618A (zh) | 一种收集日志的方法及设备 | |
CN103902590A (zh) | 终端自动化测试方法及其装置 | |
CN115455059A (zh) | 一种基于底层数据解析用户行为的方法、装置及相关介质 | |
CN101599863A (zh) | 一种实现日志功能的方法及智能网络系统 | |
CN100561953C (zh) | 一种记录诊断数据的方法 | |
CN101827068A (zh) | 一种业务场景还原方法与装置 | |
CN110825587A (zh) | 基于mcu的简易日志系统及日志管理方法 | |
CN111611107A (zh) | 获取数据库日志的方法及装置 | |
CN111445598A (zh) | 光纤航姿系统信息处理方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090513 Termination date: 20171031 |
|
CF01 | Termination of patent right due to non-payment of annual fee |