CN101625659A - 嵌入式系统实时监控内存的方法 - Google Patents
嵌入式系统实时监控内存的方法 Download PDFInfo
- Publication number
- CN101625659A CN101625659A CN200910304006A CN200910304006A CN101625659A CN 101625659 A CN101625659 A CN 101625659A CN 200910304006 A CN200910304006 A CN 200910304006A CN 200910304006 A CN200910304006 A CN 200910304006A CN 101625659 A CN101625659 A CN 101625659A
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- real time
- embedded system
- data breakpoint
- 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
本发明涉及一种嵌入式系统实时监控内存的方法,该方法包含下列步骤:1)执行程序;2)根据程序的需求分配内存区块;3)在内存区块的起始地址与结束地址分别配置数据断点;4)提供起始地址与结束地址给程序而存取内存区块;5)在存取内存区块触及起始地址与结束地址之一时,触发数据断点。本发明可快速的定位出程序内存越界的错误,为使用者减轻对内存破坏问题的除错的难度,加快软件开发排除速度,缩短开发周期,节省开发人力成本,提升软件质量。
Description
技术领域
本发明涉及一种监控内存方法,尤其是一种嵌入式系统实时监控内存的方法。
背景技术
嵌入式系统为了追求程序执行的高效率,开发中软件所使用的语言往往不具备内存垃圾回收机制的语言,如汇编、C、C++等。然而,在庞大的软件系统开发中,内存破坏的现象是无法避免,几万行的代码中,几乎就一定会存在内存破坏的环节,使得内存破坏成了开发过程非常棘手的问题。由于程序执行时其程序需要占用内存,因而会发生越界读取内存等错误,尤其是引入了多执行绪(Multi-thread)的系统,这些错误不仅会导致程序运作过程的流程出错,甚至会导致系统瘫痪,造成嵌入式系统的稳定性不佳。
在个人计算机应用领域中,多会使用一些如Purify,BoundsCheck,Valgrind,insure++等专业的内存检测软件,但其监测破坏后需要在内存释放的时候或者在分配内存资源的时候,才能发现错误,即破坏后不能马上报告而不具时效性,使得程序的除错(debug)难度大幅增加。另外,这种内存检测软件对于自行开发的操作系统无法不能完全兼容,也使得侦错效果相当有限。
因此,如何实时监控内存是否存在越界的读写或操作,以对内存破坏处的代码实时的定位和修正,进而缩短嵌入式系统软件开发的周期,是一个刻不容缓的待解决课题。
发明内容
本发明为解决背景技术中存在的上述技术问题,而提出一种嵌入式系统实时监控内存的方法。
本发明的技术解决方案是:本发明是一种嵌入式系统实时监控内存的方法,其特殊之处在于:该方法包含下列步骤:
1)执行程序;
2)根据程序的需求分配内存区块;
3)在内存区块的起始地址与结束地址分别配置数据断点;
4)提供起始地址与结束地址给程序而存取内存区块;
5)在存取内存区块触及起始地址与结束地址之一时,触发数据断点。
上述步骤5)之后还包括以下步骤:
6)停止执行程序;
7)释放内存区块;移除数据断点。
执行步骤步骤3)前,先提供校验数据,并定时根据校验数据进行校验。
上述步骤2)中先计算程序所需的内存区块的大小,再根据其需求分配内存区块10。
上述步骤2)中根据分配比例增加受分配的内存区块。
上述分配比例为随着内存资源变化,在调试版本中仅修改内存管理中的分配和释放的函数,或者使用挂入功能外包一层内存管理的函数。
上述步骤3)中,是根据内存区块的预设比例配置数据断点。
本发明利用内存区块前后动态配置数据断点以达到实时监控内存破坏,对内存区块前后边界监控范围的选取,需要根据系统调试阶段内存的充裕程度来决定。因为数据断点的自动配置,程序如果越界触及到内存区块前后设置的边界区域的时候,便会触发数据断点,而能自动的告知使用者已经有内存的越界操作,从而快速的定位出程序内存越界的错误,从而为使用者减轻对内存破坏问题的除错(debug)的难度,加快软件开发排除速度,缩短开发周期,节省开发人力成本。提升软件质量。
附图说明
图1为本发明流程图;
图2为本发明内存地址不需要按照一定规则对齐的示意图;
图3为本发明内存地址需要按照一定规则对齐的示意图。
其中,10-内存区块,20-数据断点,21-空隙,30-数据断点,31、32-空隙;
具体实施方式
参见图1、图2,该方法包含下列步骤:
步骤101:执行程序。
步骤102:根据程序的需求分配内存区块10。
在此步骤中,先计算程序所需的内存区块10的大小,再根据其需求分配内存区块10,并可根据分配比例增加受分配的内存区块10,其中,分配比例为随着内存资源变化,在调试版本中仅修改内存管理中的分配和释放的函数,或者使用挂入功能(HOOK)外包一层内存管理的函数,根据系统内存资源的充裕程度,在分配的时候增加受分配的内存区块10,如系统内存资源越充裕,则分配比例可以越大,而若内存资源紧凑,则分配比例可以设定为较小,甚至还可以结合所需分配内存的数量,动态的计算需要扩大的内存区块10。此外,分配比例除可随着内存资源变化外,也可根据实际情状设定为特定的默认值。
步骤103:在内存区块10的起始地址与结束地址分别配置数据断点20与30。
在内存区块10的起始地址配置数据断点20,在内存区块10的结束地址配置数据断点30,其中,位于起始地址的数据断点20的大小可相同于位于结束地址的数据断点30,但本发明不限于此,数据断点20的大小可不同于数据断点30,如数据断点20的大小大于数据断点30,或是数据断点20的大小小于数据断点30。
此外,位于起始地址的数据断点20的大小可为大于0字节,位于结束地址的数据断点30的大小可为大于0字节,但本发明不限于此,数据断点20或30的大小可等于0字节,但不能同时为0字节。
步骤104:提供起始地址与结束地址给程序而存取内存区块10。
当数据断点20与30设置完成后,将内存区块10的起始地址与结束地址提供给程序而存取内存区块10。
步骤105:在存取内存区块10触及起始地址与结束地址之一时,触发数据断点20或30。
在程序执行过程中,存取内存区块10时触及存取内存区块10的边界区域,若触及起始地址,触发数据断点20;若触及结束地址,触发数据断点30,通过触发数据断点20或30而能自动的告知开发人员,已经有内存区块10的越界操作,从而可快速的定位出程序内存区块10越界的错误。
步骤106:停止执行程序。
步骤107:释放内存区块10,并移除数据断点20或30。
当停止执行程序而不再需求内存区块10时,即可释放内存区块10,同时移除位于内存区块10边界区域的数据断点20或30。整个流程完全不需要修改程序,但却可以有效地实时的监测出内存区块10是否有读写越界的操作。
如果按8%等比例放大检测,程序要求100个字节的内存区块10,则前后再配置大小为4个字节的数据断点20与30,而直接向系统申请108个字节。此后,使用者实际上可以正常存取的资料应该是4~104的范围,而0~4为数据断点20,104~108为数据断点30。当程序释放内存区块10时,再动态地移除申请时候设置的数据断点20与30。
此外,数据断点20与30的大小可以根据实际需求设置,如根据前述8%等比例放大检测,数据断点20可为6字节,数据断点30可为2字节;甚至数据断点20为8字节,数据断点30为0字节,或者数据断点30为8字节,数据断点20为0字节。再如调试时内存足够充裕,如按50%等比例放大检测,程序申请100个字节,则数据断点20与30的宽度总共为50个字节,针对内存寻址需要字节对齐的平台,可以再估算内存对其需要空隙(gap)的字节数。调试时系统内存足够充裕,可以适当的再加宽数据断点20与30,可以减少内存跳跃式破坏(如跳跃过数据断点20和30)而未能监控到的概率。
若嵌入式系统对时效性需求程度较高时,可在步骤103前提供校验数据,并定时根据校验数据进行校验,即可定时的扫描校验数据,而及时地回馈出来内存区块10是否有越界破坏的操作,通过快速地找到程序中内存破坏的隐患,减少因为内存破坏的问题所需除错(debug)的时间。
参见图3,在步骤103中,可根据内存区块10的预设比例配置数据断点20与30,其中,预设比例包含第一比例与第二比例,即可根据内存区块10的第一比例配置位于起始地址的数据断点20,根据内存区块10的第二比例配置位于结束地址的数据断点30;在此,第一比例可大于等于0,但本发明不限于此,第一比例仅需小于等于预设比例即可。
若内存区块10大小为N,数据断点20大小为N1,数据断点30大小为N2,第一比例为p1%,第二比例为p2%,数据断点20边界的空隙21为S1,数据断点30边界的空隙31与32为S2与S3,则:
F(x):Assign(N,S)=(N+(S-1))*S/S
N1=N*p1%
N2=N*p2%
S1+N1=Assign(N1,S)
S1=Assign(N1,S)-N1
S2+N=Assign(N,S)
S2=Assign(N,S)-N
S3+N2=Assign(N2,S)
S3=Assign(N2,S)-N2
各区域大小依照地址对齐要求分别计算出来即可。
综上所述,本发明利用内存区块前后动态配置数据断点以达到实时监控内存破坏,对内存区块前后边界监控范围的选取,需要根据系统调试阶段内存的充裕程度来决定。因为数据断点的自动配置,程序如果越界触及到内存区块前后设置的边界区域的时候,便会触发数据断点,而能自动的告知使用者已经有内存的越界操作,从而快速的定位出程序内存越界的错误,从而为使用者减轻对内存破坏问题的除错(debug)的难度,加快软件开发排除速度,缩短开发周期,节省开发人力成本。提升软件质量。
此外,若内存足够充裕,而对实时性要求特别严格的系统且CPU不具备过多地额外运算能力,可能过多的数据断点会影响到执行速度,因此可限定仅追踪最后申请的N块内存的操作(动态的换出一些监控的数据断点),从而确保系统执行速度不受影响。另外,可增设程序开关,在适当的时候,如进入到需要排除的函数的时候,再打开监控开关,在局部运行跟踪的时候,使用此功能,其它已知没有发现问题的模块,可以屏蔽此功能,减少数据断点对系统速度的影响。
Claims (7)
1.一种嵌入式系统实时监控内存的方法,其特征在于:该方法包含下列步骤:
1)执行程序;
2)根据程序的需求分配内存区块;
3)在内存区块的起始地址与结束地址分别配置数据断点;
4)提供起始地址与结束地址给程序而存取内存区块;
5)在存取内存区块触及起始地址与结束地址之一时,触发数据断点。
2.根据权利要求1所述的嵌入式系统实时监控内存的方法,其特征在于:所述步骤5)之后还包括以下步骤:
6)停止执行程序;
7)释放内存区块;移除数据断点。
3.根据权利要求1或2所述的嵌入式系统实时监控内存的方法,其特征在于:执行步骤步骤3)前,先提供校验数据,并定时根据校验数据进行校验。
4.根据权利要求1所述的嵌入式系统实时监控内存的方法,其特征在于:所述步骤2)中先计算程序所需的内存区块的大小,再根据其需求分配内存区块。
5.根据权利要求1或4所述的嵌入式系统实时监控内存的方法,其特征在于:所述步骤2)中根据分配比例增加受分配的内存区块。
6.根据权利要求5所述的嵌入式系统实时监控内存的方法,其特征在于:所述分配比例为随着内存资源变化,在调试版本中仅修改内存管理中的分配和释放的函数,或者使用挂入功能外包一层内存管理的函数。
7.根据权利要求1所述的嵌入式系统实时监控内存的方法,其特征在于:所述步骤3)中,是根据内存区块的预设比例配置数据断点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910304006A CN101625659A (zh) | 2009-07-03 | 2009-07-03 | 嵌入式系统实时监控内存的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910304006A CN101625659A (zh) | 2009-07-03 | 2009-07-03 | 嵌入式系统实时监控内存的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101625659A true CN101625659A (zh) | 2010-01-13 |
Family
ID=41521513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910304006A Pending CN101625659A (zh) | 2009-07-03 | 2009-07-03 | 嵌入式系统实时监控内存的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101625659A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101788949A (zh) * | 2010-03-10 | 2010-07-28 | 中兴通讯股份有限公司 | 一种实现嵌入式系统函数监控的方法及装置 |
CN103116529A (zh) * | 2011-07-18 | 2013-05-22 | 英飞凌科技股份有限公司 | 用于实时检测缓冲区溢出致堆内存损坏的方法和设备 |
CN104239201A (zh) * | 2013-06-20 | 2014-12-24 | 上海博达数据通信有限公司 | 一种软单步系统中内存读写监控方法 |
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
CN105468461A (zh) * | 2016-01-15 | 2016-04-06 | 浪潮(北京)电子信息产业有限公司 | 一种内存分区的方法及系统 |
CN106126360A (zh) * | 2016-06-28 | 2016-11-16 | 青岛海信电器股份有限公司 | 地址空洞屏蔽方法及装置 |
CN111506426A (zh) * | 2020-04-17 | 2020-08-07 | 翱捷科技(深圳)有限公司 | 内存管理方法、装置及电子设备 |
CN112631821A (zh) * | 2021-01-28 | 2021-04-09 | 长沙景嘉微电子股份有限公司 | 内存故障检测定位方法、装置、计算机设备及存储介质 |
-
2009
- 2009-07-03 CN CN200910304006A patent/CN101625659A/zh active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101788949A (zh) * | 2010-03-10 | 2010-07-28 | 中兴通讯股份有限公司 | 一种实现嵌入式系统函数监控的方法及装置 |
CN101788949B (zh) * | 2010-03-10 | 2015-01-28 | 中兴通讯股份有限公司 | 一种实现嵌入式系统函数监控的方法及装置 |
CN103116529A (zh) * | 2011-07-18 | 2013-05-22 | 英飞凌科技股份有限公司 | 用于实时检测缓冲区溢出致堆内存损坏的方法和设备 |
CN103116529B (zh) * | 2011-07-18 | 2016-03-02 | 英飞凌科技股份有限公司 | 用于实时检测缓冲区溢出致堆内存损坏的方法和设备 |
CN104239201A (zh) * | 2013-06-20 | 2014-12-24 | 上海博达数据通信有限公司 | 一种软单步系统中内存读写监控方法 |
CN104239201B (zh) * | 2013-06-20 | 2018-08-24 | 上海博达数据通信有限公司 | 一种软单步系统中内存读写监控方法 |
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
CN105468461A (zh) * | 2016-01-15 | 2016-04-06 | 浪潮(北京)电子信息产业有限公司 | 一种内存分区的方法及系统 |
CN106126360A (zh) * | 2016-06-28 | 2016-11-16 | 青岛海信电器股份有限公司 | 地址空洞屏蔽方法及装置 |
CN106126360B (zh) * | 2016-06-28 | 2020-08-25 | 海信视像科技股份有限公司 | 地址空洞屏蔽方法及装置 |
CN111506426A (zh) * | 2020-04-17 | 2020-08-07 | 翱捷科技(深圳)有限公司 | 内存管理方法、装置及电子设备 |
CN112631821A (zh) * | 2021-01-28 | 2021-04-09 | 长沙景嘉微电子股份有限公司 | 内存故障检测定位方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101625659A (zh) | 嵌入式系统实时监控内存的方法 | |
CN103116529B (zh) | 用于实时检测缓冲区溢出致堆内存损坏的方法和设备 | |
US8136097B2 (en) | Thread debugging device, thread debugging method and information storage medium | |
US9015676B2 (en) | Varying removal of internal breakpoints during debugging of code | |
US8370816B2 (en) | Device, method and computer program product for evaluating a debugger script | |
US8499289B2 (en) | Method, device and system for realizing kernel online patching | |
US8423970B2 (en) | Method, computer program product, and hardware product for handling breakpoints in an asynchronous debug model | |
US8997059B2 (en) | Reverse debugging | |
US8843899B2 (en) | Implementing a step-type operation during debugging of code using internal breakpoints | |
US8806447B2 (en) | Step-type operation processing during debugging by machine instruction stepping concurrent with setting breakpoints | |
WO2007080931A1 (ja) | デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム | |
WO2016101503A1 (zh) | 一种热补丁的实现方法和装置 | |
CN105354045A (zh) | 补丁的制作方法及装置、补丁的激活方法及装置 | |
CN106874022B (zh) | 一种热补丁注入方法及装置 | |
US7657792B2 (en) | Identifying race conditions involving asynchronous memory updates | |
US9778969B2 (en) | Automatic memory leak detection | |
CN105095079A (zh) | 一种热点模块指令跟踪的方法及设备 | |
CN104714834A (zh) | 一种空间确定的任务调度方法 | |
CN111931191A (zh) | Linux平台二进制软件堆溢漏洞动态检测方法及系统 | |
US10061681B2 (en) | System for discovering bugs using interval algebra query language | |
CN104035776A (zh) | 一种操作系统的启动方法 | |
US8689206B2 (en) | Isolating operating system in-memory modules using error injection | |
JP5870043B2 (ja) | 起動制御装置、情報機器および起動制御方法 | |
EP2960798B1 (en) | Automatic memory leak detection | |
JP2009223714A (ja) | 演算回路及び演算回路の異常解析方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20100113 |