CN103294588A - 内存检测系统及方法 - Google Patents
内存检测系统及方法 Download PDFInfo
- Publication number
- CN103294588A CN103294588A CN 201210041033 CN201210041033A CN103294588A CN 103294588 A CN103294588 A CN 103294588A CN 201210041033 CN201210041033 CN 201210041033 CN 201210041033 A CN201210041033 A CN 201210041033A CN 103294588 A CN103294588 A CN 103294588A
- Authority
- CN
- China
- Prior art keywords
- internal memory
- memory
- information
- pointer
- operation note
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种内存检测系统,运行于电子设备中,该系统包括:定义模块,用于自定义一个动态库,该自定义的动态库包括内存分配拦截函数与内存释放拦截函数;第一拦截模块,用于当该电子设备中的进程请求分配内存时,查找自定义的动态库,执行该动态库中的内存分配拦截函数,获取内存分配信息并记录到操作记录中;第二拦截模块,用于当该电子设备中的进程请求释放内存时,查找自定义的动态库,执行该动态库中的内存释放拦截函数,获取内存释放信息并记录到该操作记录中;及分析模块,用于根据操作记录中记录的内存分配信息和内存释放信息,对内存的使用情况进行分析。本发明还提供一种内存检测方法。本发明能够实时动态地检测内存的使用情况。
Description
技术领域
本发明涉及一种内存检测系统及方法,特别是关于一种对电子设备动态分配的内存进行检测的系统及方法。
背景技术
在手机等嵌入式电子设备中,内存资源较小,如果进程在使用之后不将其释放,势必导致电子设备性能下降,运行速度变慢,无法及时响应用户的操作请求,甚至连正常功能都无法使用。
目前,对电子设备内存的检测主要采用宏替换或重定义的方法,该方法存在以下缺点:
1.需要和源代码一起编译,只适合代码的调试阶段,不适合代码的发行阶段。
2.只是简单记录进程内存动态分配的情况,在进程退出的时候,才能打印出没有释放的内存信息,不能在运行过程中报告内存状况,即没有运行时动态检测的功能。
发明内容
鉴于以上内容,有必要提供一种内存检测系统,能够实时动态地检测内存的使用情况。
此外,还有必要提供一种内存检测方法,能够实时动态地检测内存的使用情况。
一种内存检测系统,运行于电子设备中,该系统包括:定义模块,用于自定义一个动态库,该自定义的动态库包括内存分配拦截函数与内存释放拦截函数;第一拦截模块,用于当该电子设备中的进程请求分配内存时,查找自定义的动态库,执行该动态库中的内存分配拦截函数,获取内存分配信息并记录到操作记录中;第二拦截模块,用于当该电子设备中的进程请求释放内存时,查找自定义的动态库,执行该动态库中的内存释放拦截函数,获取内存释放信息并记录到该操作记录中;及分析模块,用于根据操作记录中记录的内存分配信息和内存释放信息,对内存的使用情况进行分析。
一种内存检测方法,应用于电子设备中,该方法包括:定义步骤,自定义一个动态库,该自定义的动态库包括内存分配拦截函数与内存释放拦截函数;第一拦截步骤,当该电子设备中的进程请求分配内存时,查找自定义的动态库,执行该动态库中的内存分配拦截函数,获取内存分配信息并记录到操作记录中;第二拦截步骤,当该电子设备中的进程请求释放内存时,查找自定义的动态库,执行该动态库中的内存释放拦截函数,获取内存释放信息并记录到该操作记录中;及分析步骤,根据操作记录中记录的内存分配信息和内存释放信息,对内存的使用情况进行分析。
本发明采用自定义的动态库拦截对内存的操作,该动态库可单独编译,不影响程序设计语言原有的内存管理库,可以与程序设计语言原有的内存管理库协同工作。本发明对内存的检测既可在调试阶段,也可在运行阶段。并且,本发明不必等到进程退出就可以告知内存有无泄漏以及释放的情况,克服了传统内存检测方法所存在的缺陷。
附图说明
图1为本发明内存检测系统较佳实施例的应用环境示意图。
图2为图1中内存检测系统的功能模块图。
图3为本发明内存检测方法较佳实施例的流程图。
主要元件符号说明
内存检测系统 | 10 |
电子设备 | 11 |
存储设备 | 12 |
显示设备 | 13 |
处理器 | 14 |
定义模块 | 200 |
第一拦截模块 | 210 |
第二拦截模块 | 220 |
分析模块 | 230 |
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
参阅图1所示,是本发明内存检测系统较佳实施例的应用环境示意图。所述内存检测系统10运行于电子设备11中。所述电子设备11包括存储设备12、显示设备13及处理器14。所述存储设备12包括多种类型的存储器(例如内存、外存、缓存),用于存储内存检测系统10的计算机化程序代码及运行过程中所需的数据。所述处理器14执行所述计算机化程序代码,对电子设备11动态分配的内存进行检测。所述显示设备13用于显示内存检测的结果。在本实施例中,所述电子设备11是手机。
参阅图2所示,是图1中内存检测系统10的功能模块图。所述内存检测系统10包括定义模块200、第一拦截模块210、第二拦截模块220及分析模块230。
所述定义模块200用于自定义一个动态库,该自定义的动态库包括内存分配拦截函数与内存释放拦截函数。其中,内存分配拦截函数与程序设计语言(例如C或C++)标准库函数中的内存分配函数同名,内存释放拦截函数与程序设计语言标准库函数中的内存释放函数同名。例如,内存分配拦截函数命名为malloc,内存释放拦截函数命名为free。
所述第一拦截模块210用于当该电子设备11中的进程请求分配内存时,查找自定义的动态库,执行该动态库中的内存分配拦截函数,获取内存分配信息并记录到操作记录中。具体地,第一拦截模块210获取内存分配函数的地址(即内存分配函数指针),从该内存分配函数的地址执行内存分配函数以分配进程所需的内存,并将分配的内存指针、分配的内存大小添加到操作记录中。在本实施例中,所述查找自定义的动态库通过设置环境变量来实现。例如,通过设置环境变量LD_PRELOAD指定加载该自定义的动态库。
所述第二拦截模块220用于当该电子设备11中的进程请求释放内存时,查找自定义的动态库,执行该动态库中的内存释放拦截函数,获取内存释放信息并记录到操作记录中。具体地,第二拦截模块220获取内存释放函数的地址(即内存释放函数指针),检查内存释放函数所要释放的内存指针是否为空。若内存释放函数所要释放的内存指针为空,则在操作记录中添加释放空指针的信息。否则,若内存释放函数所要释放的内存指针不为空,则在操作记录中查找是否有该内存指针的信息。若在操作记录中有该内存指针的信息,则从内存释放函数的地址执行内存释放函数以对该内存指针对应的内存进行释放,并且从操作记录中清除该内存指针对应的内存分配信息。否则,若在内存分配的操作记录中不存在该内存指针的信息,则在操作记录中添加释放野指针的信息。
在本实施例中,所述操作记录采用静态分配的数组来实现。数组的每个元素是指向一个结构体的指针,每个结构体对应于一次对内存分配信息/内存释放信息的拦截和记录。结构体的成员包括内存分配信息(如分配的内存指针、分配的内存大小)及内存释放信息(如释放空指针、释放野指针)。所述结构体的成员还包括指向下一个结构体的指针。每执行一次对内存分配信息/内存释放信息的记录后,修改该指向下一个结构体的指针,以用于下一次的记录。
所述分析模块230用于根据操作记录中的内存分配信息和内存释放信息,对内存的使用情况进行分析。具体地,分析模块230根据操作记录统计已分配的内存,并将已分配的内存与预先设定的最大内存需求量进行比较。若已分配的内存大于等于最大内存需求量,则在显示设备13上提示用户内存发生泄露;否则,若已分配的内存小于最大内存需求量,则在显示设备13上提示用户内存未发生泄露。此外,分析模块230从操作记录中取出内存释放信息并显示在显示设备13上,根据内存释放信息通知用户是否有空指针和野指针的操作。
本发明对内存使用情况的分析可以在进程退出时执行,也可以根据需要随时执行。若需要在进程退出时对内存使用情况进行分析,则可以预先注册进程退出时的处理函数,使得在进程退出时自动调用分析模块230对内存使用情况进行分析。如果是在进程运行过程中对内存使用情况进行分析,则在需要时执行该分析模块230。
参阅图3所示,是本发明内存检测方法较佳实施例的流程图。
步骤S301,定义模块200自定义一个动态库,该自定义的动态库包括内存分配拦截函数与内存释放拦截函数。其中,内存分配拦截函数与程序设计语言(例如C或C++)标准库函数中的内存分配函数同名,内存释放拦截函数与程序设计语言标准库函数中的内存释放函数同名。例如,内存分配拦截函数命名为malloc,内存释放拦截函数命名为free。
当该电子设备11中的进程请求分配内存时,步骤S302,第一拦截模块210查找自定义的动态库,执行该动态库中的内存分配拦截函数,获取内存分配信息并记录到操作记录中。具体地,第一拦截模块210获取内存分配函数的地址(即内存分配函数指针),从该内存分配函数的地址执行内存分配函数以分配进程所需的内存,并将分配的内存指针、分配的内存大小添加到操作记录中。在本实施例中,所述查找自定义的动态库通过设置环境变量来实现。
当该电子设备11中的进程请求释放内存时,步骤S303,第二拦截模块220查找自定义的动态库,执行该动态库中的内存释放拦截函数,获取内存释放信息并记录到操作记录中。具体地,第二拦截模块220获取内存释放函数的地址(即内存释放函数指针),检查内存释放函数所要释放的内存指针是否为空。若内存释放函数所要释放的内存指针为空,则在操作记录中添加释放空指针的信息。否则,若内存释放函数所要释放的内存指针不为空,则在操作记录中查找是否有该内存指针的信息。若在操作记录中有该内存指针的信息,则从内存释放函数的地址执行内存释放函数以对该内存指针对应的内存进行释放,并且从操作记录中清除该内存指针对应的内存分配信息。否则,若在内存分配的操作记录中不存在该内存指针的信息,则在操作记录中添加释放野指针的信息。
步骤S304,分析模块230根据操作记录中的内存分配信息和内存释放信息,对内存的使用情况进行分析。具体地,分析模块230根据操作记录统计已分配的内存,并将已分配的内存与预先设定的最大内存需求量进行比较。若已分配的内存大于等于最大内存需求量,则在显示设备13上提示用户内存发生泄露;否则,若已分配的内存小于最大内存需求量,则在显示设备13上提示用户内存未发生泄露。此外,分析模块230从操作记录中取出内存释放信息并显示在显示设备13上,根据内存释放信息通知用户是否有空指针和野指针的操作。
上述实施例采用自定义的动态库拦截对内存的操作,该动态库可单独编译,不影响程序设计语言原有的内存管理库,可以与程序设计语言原有的内存管理库协同工作。本发明对内存的检测既可在调试阶段,也可在运行阶段。并且,本发明不必等到进程退出就可以告知内存有无泄漏以及释放的情况,克服了传统内存检测方法所存在的缺陷。
Claims (10)
1.一种内存检测系统,运行于电子设备中,其特征在于,该系统包括:
定义模块,用于自定义一个动态库,该自定义的动态库包括内存分配拦截函数与内存释放拦截函数;
第一拦截模块,用于当该电子设备中的进程请求分配内存时,查找自定义的动态库,执行该动态库中的内存分配拦截函数,获取内存分配信息并记录到操作记录中;
第二拦截模块,用于当该电子设备中的进程请求释放内存时,查找自定义的动态库,执行该动态库中的内存释放拦截函数,获取内存释放信息并记录到该操作记录中;及
分析模块,用于根据操作记录中记录的内存分配信息和内存释放信息,对内存的使用情况进行分析。
2.如权利要求1所述的内存检测系统,其特征在于,所述第一拦截模块获取内存分配信息并记录到操作记录中包括:
获取内存分配函数的地址;
从该内存分配函数的地址执行内存分配函数以分配进程所需的内存;及
将分配的内存指针、分配的内存大小添加到操作记录中。
3.如权利要求2所述的内存检测系统,其特征在于,所述第二拦截模块获取内存释放信息并记录到操作记录中包括:
获取内存释放函数的地址,检查内存释放函数所要释放的内存指针是否为空;
若内存释放函数所要释放的内存指针为空,则在操作记录中添加释放空指针的信息;
若内存释放函数所要释放的内存指针不为空,则在操作记录中查找是否有该内存指针的信息;
若在操作记录中有该内存指针的信息,则从内存释放函数的地址执行内存释放函数以对该内存指针对应的内存进行释放,并从操作记录中清除该内存指针对应的内存分配信息;及
若在操作记录中不存在该内存指针的信息,则在操作记录中添加释放野指针的信息。
4.如权利要求3所述的内存检测系统,其特征在于,所述分析模块根据对内存的使用情况进行分析包括:
根据操作记录中记录的内存分配信息统计已分配的内存,并将已分配的内存与预先设定的最大内存需求量进行比较;
若已分配的内存大于等于最大内存需求量,则提示用户内存发生泄露;及
若已分配的内存小于最大内存需求量,则提示用户内存未发生泄露。
5.如权利要求3所述的内存检测系统,其特征在于,所述分析模块对内存的使用情况进行分析包括:
从操作记录中取出内存释放信息并显示在该电子设备的显示设备上,根据内存释放信息通知用户是否有空指针和野指针的操作。
6.一种内存检测方法,应用于电子设备中,其特征在于,该方法包括:
定义步骤,自定义一个动态库,该自定义的动态库包括内存分配拦截函数与内存释放拦截函数;
第一拦截步骤,当该电子设备中的进程请求分配内存时,查找自定义的动态库,执行该动态库中的内存分配拦截函数,获取内存分配信息并记录到操作记录中;
第二拦截步骤,当该电子设备中的进程请求释放内存时,查找自定义的动态库,执行该动态库中的内存释放拦截函数,获取内存释放信息并记录到该操作记录中;及
分析步骤,根据操作记录中记录的内存分配信息和内存释放信息,对内存的使用情况进行分析。
7.如权利要求6所述的内存检测方法,其特征在于,所述第一拦截步骤包括:
获取内存分配函数的地址;
从该内存分配函数的地址执行内存分配函数以分配进程所需的内存;及
将分配的内存指针、分配的内存大小添加到操作记录中。
8.如权利要求7所述的内存检测方法,其特征在于,所述第二拦截步骤包括:
获取内存释放函数的地址,检查内存释放函数所要释放的内存指针是否为空;
若内存释放函数所要释放的内存指针为空,则在操作记录中添加释放空指针的信息;
若内存释放函数所要释放的内存指针不为空,则在操作记录中查找是否有该内存指针的信息;
若在操作记录中有该内存指针的信息,则从内存释放函数的地址执行内存释放函数以对该内存指针对应的内存进行释放,并从操作记录中清除该内存指针对应的内存分配信息;及
若在操作记录中不存在该内存指针的信息,则在操作记录中添加释放野指针的信息。
9.如权利要求8所述的内存检测方法,其特征在于,所述分析步骤包括:
根据操作记录中记录的内存分配信息统计已分配的内存,并将已分配的内存与预先设定的最大内存需求量进行比较;
若已分配的内存大于等于最大内存需求量,则提示用户内存发生泄露;及
若已分配的内存小于最大内存需求量,则提示用户内存未发生泄露。
10.如权利要求8所述的内存检测方法,其特征在于,所述分析步骤包括:
从操作记录中取出内存释放信息并显示在该电子设备的显示设备上,根据内存释放信息通知用户是否有空指针和野指针的操作。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201210041033 CN103294588A (zh) | 2012-02-22 | 2012-02-22 | 内存检测系统及方法 |
TW101107118A TW201335752A (zh) | 2012-02-22 | 2012-03-02 | 記憶體檢測系統及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201210041033 CN103294588A (zh) | 2012-02-22 | 2012-02-22 | 内存检测系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103294588A true CN103294588A (zh) | 2013-09-11 |
Family
ID=49095507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201210041033 Pending CN103294588A (zh) | 2012-02-22 | 2012-02-22 | 内存检测系统及方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103294588A (zh) |
TW (1) | TW201335752A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104778087A (zh) * | 2014-01-09 | 2015-07-15 | 中国移动通信集团山东有限公司 | 一种信息处理方法以及信息处理装置 |
CN106407031A (zh) * | 2016-09-14 | 2017-02-15 | 华为数字技术(成都)有限公司 | 一种内存泄露定位方法及电子设备 |
CN106484580A (zh) * | 2016-10-21 | 2017-03-08 | 腾讯科技(深圳)有限公司 | 一种内存检测方法、装置及系统 |
CN106610892A (zh) * | 2015-10-23 | 2017-05-03 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法和装置 |
CN107066390A (zh) * | 2017-04-24 | 2017-08-18 | 许继集团有限公司 | 一种动态内存泄漏检测方法及系统 |
CN107423220A (zh) * | 2017-08-04 | 2017-12-01 | 青岛海信宽带多媒体技术有限公司 | 内存泄露的检测方法及装置、电子设备 |
CN107562586A (zh) * | 2017-08-16 | 2018-01-09 | 努比亚技术有限公司 | 一种内存检测方法、设备及计算机存储介质 |
CN107943681A (zh) * | 2017-12-08 | 2018-04-20 | 郑州云海信息技术有限公司 | 内存占用情况分析方法、装置、设备及计算机存储介质 |
CN110210220A (zh) * | 2018-07-19 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 一种信息泄露检测方法、装置和存储介质 |
CN110413401A (zh) * | 2018-04-28 | 2019-11-05 | 武汉斗鱼网络科技有限公司 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
CN111274155A (zh) * | 2020-02-25 | 2020-06-12 | 腾讯科技(深圳)有限公司 | 动态库的内存操作记录方法、装置、设备及存储介质 |
CN112559184A (zh) * | 2020-12-17 | 2021-03-26 | 成都思酷智能科技有限公司 | 一种云桌面动态分配内存的方法及装置 |
-
2012
- 2012-02-22 CN CN 201210041033 patent/CN103294588A/zh active Pending
- 2012-03-02 TW TW101107118A patent/TW201335752A/zh unknown
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104778087A (zh) * | 2014-01-09 | 2015-07-15 | 中国移动通信集团山东有限公司 | 一种信息处理方法以及信息处理装置 |
CN106610892A (zh) * | 2015-10-23 | 2017-05-03 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法和装置 |
CN106407031A (zh) * | 2016-09-14 | 2017-02-15 | 华为数字技术(成都)有限公司 | 一种内存泄露定位方法及电子设备 |
CN106407031B (zh) * | 2016-09-14 | 2019-05-28 | 华为数字技术(成都)有限公司 | 一种内存泄露定位方法及电子设备 |
CN106484580B (zh) * | 2016-10-21 | 2019-10-18 | 腾讯科技(深圳)有限公司 | 一种内存检测方法、装置及系统 |
CN106484580A (zh) * | 2016-10-21 | 2017-03-08 | 腾讯科技(深圳)有限公司 | 一种内存检测方法、装置及系统 |
CN107066390A (zh) * | 2017-04-24 | 2017-08-18 | 许继集团有限公司 | 一种动态内存泄漏检测方法及系统 |
CN107066390B (zh) * | 2017-04-24 | 2020-01-17 | 许继集团有限公司 | 一种动态内存泄漏检测方法及系统 |
CN107423220A (zh) * | 2017-08-04 | 2017-12-01 | 青岛海信宽带多媒体技术有限公司 | 内存泄露的检测方法及装置、电子设备 |
CN107562586A (zh) * | 2017-08-16 | 2018-01-09 | 努比亚技术有限公司 | 一种内存检测方法、设备及计算机存储介质 |
CN107943681A (zh) * | 2017-12-08 | 2018-04-20 | 郑州云海信息技术有限公司 | 内存占用情况分析方法、装置、设备及计算机存储介质 |
CN110413401A (zh) * | 2018-04-28 | 2019-11-05 | 武汉斗鱼网络科技有限公司 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
CN110210220A (zh) * | 2018-07-19 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 一种信息泄露检测方法、装置和存储介质 |
CN111274155A (zh) * | 2020-02-25 | 2020-06-12 | 腾讯科技(深圳)有限公司 | 动态库的内存操作记录方法、装置、设备及存储介质 |
CN112559184A (zh) * | 2020-12-17 | 2021-03-26 | 成都思酷智能科技有限公司 | 一种云桌面动态分配内存的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
TW201335752A (zh) | 2013-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103294588A (zh) | 内存检测系统及方法 | |
CN110457277B (zh) | 业务处理性能分析方法、装置、设备及存储介质 | |
US9529692B2 (en) | Memory management tools | |
CN109471697B (zh) | 一种监控虚拟机中系统调用的方法、装置及存储介质 | |
US8881107B2 (en) | Automatic memory leak detection | |
CN112035354B (zh) | 风险代码的定位方法、装置、设备及存储介质 | |
US20140068351A1 (en) | Blackbox Memory Monitoring with a Calling Context Memory Map and Semantic Extraction | |
CN103577310A (zh) | 记录软件调试日志的方法以及装置 | |
CN105607986A (zh) | 用户行为日志数据采集方法及装置 | |
CN104408366A (zh) | 基于插装技术的安卓应用程序权限使用行为跟踪方法 | |
CN112445686A (zh) | 内存泄漏检测方法、装置以及计算机可读存储介质 | |
CN102681938A (zh) | 一种内存泄漏检测方法及装置 | |
US10241895B2 (en) | Memory stack trace management tool | |
CN110647472A (zh) | 崩溃信息统计方法、装置、计算机设备及存储介质 | |
CN110990842A (zh) | 一种小概率事件的复现方法、装置、存储介质及电子设备 | |
CN110633190B (zh) | 一种应用程序内存监控方法、装置、设备及存储介质 | |
CN110597704A (zh) | 应用程序的压力测试方法、装置、服务器和介质 | |
CN110347565B (zh) | 一种应用程序的异常分析方法及装置、电子设备 | |
US9442818B1 (en) | System and method for dynamic data collection | |
CN105117332B (zh) | 一种栈溢出位置的检测方法 | |
US9442823B2 (en) | Memory error tracking in a multiple-user development environment | |
US20210303435A1 (en) | Method, device, and computer program product for obtaining diagnostic information | |
CN112632547A (zh) | 一种数据处理方法和相关装置 | |
CN103425576A (zh) | 信息反馈的方法及终端 | |
CN112162954B (zh) | 用户操作日志生成、路径的定位方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130911 |