一种内存越界的定位方法及装置的制造方法

文档序号:8339522阅读:320来源:国知局
一种内存越界的定位方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别涉及一种内存越界的定位方法及装置。
【背景技术】
[0002]现在嵌入式Iinux设备的应用场景越来越多,相关的软件开发的规模也越来越大,对调试软件bug的时间和难度要求也越来越高,其中,内存越界就是一个调试难度很大,也非常耗费时间,却很容易出现的bug。
[0003]现有技术中,常用的定位方法只能定位最后发生问题的代码位置,但内存越界是对越界后内存的污染,当时不会发生错误,事后使用被污染的内存时,才会触发错误,所以常见的调试方法,只能定位到使用被污染内存的代码,但无法定位到元凶内存越界的代码。内存越界可能是数据段的内存、栈或者堆,其中堆内存越界是最常见,也最难定位的,因为堆内存是使用最多且全局都可以访问的。所以内存越界常见的解决方法是依靠业务经验和测试来不断缩小范围,或者移植到其他功能更强大的系统上,依靠强大的硬件和工具来定位,但往往环境改变或模拟业务很难再复现问题。
[0004]通过上述描述可见,对于内存越界的定位需要根据经验和测试不断缩小范围,或移植到其他功能更强大的系统上进行定位,总之,现有技术中需要花费大量时间和资源来进行定位,定位效率较低。

【发明内容】

[0005]有鉴于此,本发明提供了一种内存越界的定位方法及装置,能够提高内存越界定位的效率。
[0006]本发明提供了一种内存越界的定位方法,包括:预先设置用于检测内存越界的检测接口,还包括:
[0007]S1:在被申请的有效内存的两端分别增加与所述有效内存相邻的保护内存;
[0008]S2:当发生错误时,调用所述检测接口 ;
[0009]S3:通过所述检测接口检测每个有效内存的保护内存是否被内存越界污染,确定所有有效内存中发生内存越界的越界内存;
[0010]S4:确定所述越界内存对应的代码。
[0011]进一步地,所述S3,包括:
[0012]通过所述检测接口检测当前有效内存的保护内存是否满足:后端的保护内存被内存越界污染,且前端的内存没有被内存越界污染,如果是,则判定当前有效内存发生内存越界,否则,判定当前有效内存没有发生内存越界。
[0013]进一步地,还包括:
[0014]在堆栈中记录每个有效内存在创建时的第一预设值条堆栈信息;
[0015]所述S4,包括:
[0016]获取所述越界内存对应的堆栈信息;
[0017]根据所述堆栈信息确定所述越界内存在代码中创建的位置。
[0018]进一步地,所述根据所述堆栈信息确定所述越界内存在代码中创建的位置,包括:
[0019]根据所述堆栈信息获取函数调用关系;
[0020]根据所述函数调用关系确定所述越界内存在代码中创建的位置。
[0021]进一步地,在所述SI之前,还包括:
[0022]Al:判断当前空闲的内存的大小是否小于等于第二预设值,如果是,则执行SI,否则执行BI ;
[0023]B1:在有效内存被申请时,创建所述PageHeap,将所述有效内存的结尾放在所述PageHeap页的边缘,在所述有效内存后分配与所述有效内存相邻的不能写的内存;
[0024]B2:检测内存越界的信号,当检测到内存越界的信号时,判定当前有效内存发生内存越界;
[0025]B3:根据所述PageHeap确定发生内存越界的有效内存对应的代码。
[0026]另一方面,本发明提供了一种内存越界的定位装置,包括:
[0027]设置单元,用于设置用于检测内存越界的检测接口 ;
[0028]增加单元,用于在被申请的有效内存的两端分别增加与所述有效内存相邻的保护内存;
[0029]调用单元,用于当发生错误时,调用所述检测接口 ;
[0030]第一确定单元,用于通过所述检测接口检测每个有效内存的保护内存是否被内存越界污染,确定所有有效内存中发生内存越界的越界内存;
[0031]第二确定单元,确定所述越界内存对应的代码。
[0032]进一步地,所述第一确定单元,用于通过所述检测接口检测当前有效内存的保护内存是否满足:后端的保护内存被内存越界污染,且前端的内存没有被内存越界污染,当检测结果为是时,则判定当前有效内存发生内存越界,当检测结果为否时,则判定当前有效内存没有发生内存越界。
[0033]进一步地,还包括:
[0034]记录单元,用于在堆栈中记录每个有效内存在创建时的第一预设值条堆栈信息;
[0035]所述第二确定单元,包括:
[0036]获取子单元,用于获取所述越界内存对应的堆栈信息;
[0037]确定子单元,用于根据所述堆栈信息确定所述越界内存在代码中创建的位置。
[0038]进一步地,所述确定子单元,包括:
[0039]调用关系获取单元,用于根据所述堆栈信息获取函数调用关系;
[0040]位置确定单元,用于根据所述函数调用关系确定所述越界内存在代码中创建的位置。
[0041]进一步地,还包括:
[0042]判断装置,用于判断当前空闲的内存的大小是否小于等于第二预设值,当判断结果为是时,通知所述增加单元,当判断结果为否时,通知创建单元;
[0043]创建单元,用于在有效内存被申请时,创建所述PageHeap,将所述有效内存的结尾放在所述PageHeap页的边缘,在所述有效内存后分配与所述有效内存相邻的不能写的内存;
[0044]内存越界检测单元,用于检测内存越界的信号,当检测到内存越界的信号时,判定当前有效内存发生内存越界;
[0045]代码确定单元,用于根据所述PageHeap确定发生内存越界的有效内存对应的代码。
[0046]本发明提供的一种内存越界的定位方法及装置,在有效内存两端增加保护内存,通过预先设置的检测接口检测保护内存是否被内存越界污染来定位越界内存,然后根据越界内存确定对应的代码,该方法无需反复测试,节省时间,也无需在其他系统上进行定位,节省资源,提高了内存越界定位的效率。
【附图说明】
[0047]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0048]图1是本发明一实施例提供的一种内存越界的定位方法流程图;
[0049]图2是本发明一实施例提供的另一种内存越界的定位方法流程图;
[0050]图3是本发明一实施例提供的一种内存越界的定位装置的示意图;
[0051]图4是本发明一实施例提供的另一种内存越界的定位装置的示意图。
【具体实施方式】
[0052]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0053]如图1所示,本发明实施例提供了一种内存越界的定位方法,该方法可以包括以下步骤:
[0054]SO:预先设置用于检测内存越界的检测接口 ;
[0055]S1:在被申请的有效内存的两端分别增加与所述有效内存相邻的保护内存;
[0056]S2:当发生错误时,调用所述检测接口 ;
[0057]S3:通过所述检测接口检测每个有效内存的保护内存是否被内存越界污染,确定所有有效内存中发生内存越界的越界内存;
[0058]S4:确定所述越界内存对应的代码。
[0059]本发明实施例提供的一种内存越界的定位方法,在有效内存两端增加保护内存,通过预
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1