基于内存池的内存错误调试方法和装置制造方法及图纸

技术编号:19903277 阅读:26 留言:0更新日期:2018-12-26 02:52
本申请实施例公开一种基于内存池的内存错误调试方法和装置,该方法由内存池管理动态申请的内存,内存池中的每个内存由一个内存管理结构记录内存管理信息,在引用、释放目标内存时,可以获取目标内存的内存管理信息,内存管理信息可以反映出是否出现内存错误以及内存错误的位置,这样,当出现内存错误时便可以根据内存管理信息对内存错误进行调试。在未出现内存错误时,可以执行引用、释放目标内存的操作,并更新内存管理信息,以便后续利用更新后的内存管理信息执行获取目标内存的内存管理信息的步骤。可见,通过内存池中记录的内存管理信息可以发现和定位这些比较复杂的内存错误,从而对复杂的内存错误进行调试。

【技术实现步骤摘要】
基于内存池的内存错误调试方法和装置
本申请涉及数据存储领域,特别是涉及一种基于内存池的内存错误调试方法和装置。
技术介绍
在存储系统中,普遍采用编程语言例如C语言或C++语言来实现内存管理,这种内存管理方法需要的代码量十分庞大、且逻辑实现复杂,导致经常出现引用已释放内存、内存重复释放、内存泄漏、内存缓冲区溢出等内存错误,这些内存错误可能会影响程序的正常运行,因此,需要对这些内存错误进行调试,以修正这些内存错误。目前,内存错误调试的方法主要有代码走查,使用静态分析工具lint等工具分析代码,单元测试、系统测试及分析日志log等。这些方法都是对代码逻辑进行分析,仅能对一些简单的内存错误进行调试,一旦代码逻辑比较复杂,内存错误隐藏在复杂的代码逻辑之中,那么,这些方法将难以发现和定位这些比较复杂的内存错误,从而难以对复杂的内存错误进行调试。
技术实现思路
为了解决上述技术问题,本申请提供了一种基于内存池的内存错误调试方法和装置,该方法通过内存池中记录的内存管理信息可以发现和定位这些比较复杂的内存错误,从而对复杂的内存错误进行调试。本申请实施例公开了如下技术方案:第一方面,本申请实施例提供了一种基于内存池的内存错误调试方法,内存池管理动态申请的内存,所述内存池包括至少一个内存空闲链表,每个内存空闲链表中包括至少一个链表节点,每个链表节点对应的内存由一个内存管理结构记录内存管理信息,所述方法包括:获取目标内存的内存管理信息,所述内存管理信息中至少包括内存分配、内存引用和内存释放的相关信息;若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试;若根据所述内存管理信息确定所述目标内存未出现内存错误,则更新所述内存管理信息,将更新后的内存管理信息记录在目标内存对应的内存管理结构中,以便后续利用更新后的内存管理信息执行所述获取目标内存的内存管理信息的步骤。可选的,在所述获取目标内存的内存管理信息之前,所述方法还包括:获取内存分配请求,所述内存分配请求中包括内存大小信息;根据所述内存分配请求确定内存池中对应的内存空闲链表;取下所述内存空闲链表中的一个节点,将所述节点插入到已分配的内存链表中;初始化所述节点的内存管理信息及内存的校验值。可选的,若所述内存管理信息中包括内存引用的相关信息,所述目标内存具有校验值,在引用目标内存时,所述若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试,包括:根据所述内存管理信息确定所述目标内存是否已被释放;若是,则触发程序崩溃;若否,则根据所述目标内存的校验值确定是否存在缓冲区溢出;若存在,则触发程序崩溃。可选的,若所述内存管理信息中包括内存引用的相关信息和内存释放的相关信息,所述目标内存具有校验值,在释放目标内存时,所述若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试,包括:根据所述内存管理信息确定目标内存是否已被释放;若是,则触发程序崩溃;若否,则根据所述目标内存的校验值确定是否存在缓冲区溢出;若存在,则触发程序崩溃。可选的,若所述引用的相关信息包括内存引用计数,根据所述目标内存的校验值确定不存在缓冲区溢出,所述更新所述内存管理信息,包括:减少所述内存引用计数。可选的,所述方法还包括:判断所述内存引用计数是否为零;若是,则将所述目标内存对应的节点从所述已分配内存链表中取下,并插入所述内存空闲链表。可选的,所述若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试,包括:扫描所述已分配内存链表,查看目标内存的分配时间是否超过预设阈值;若是,则确定所述目标内存出现内存错误,并根据所述目标内存对应的内存管理信息对所述内存错误进行调试。第二方面,本申请实施例提供了一种基于内存池的内存错误调试装置,内存池管理动态申请的内存,所述内存池包括至少一个内存空闲链表,每个内存空闲链表中包括至少一个链表节点,每个链表节点对应的内存由一个内存管理结构记录内存管理信息,所述装置包括第一获取单元、调试单元和更新单元:所述第一获取单元,用于获取目标内存的内存管理信息,所述内存管理信息中至少包括内存分配、内存引用和内存释放的相关信息;所述调试单元,用于若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试;所述更新单元,用于若根据所述内存管理信息确定所述目标内存未出现内存错误,则更新所述内存管理信息,将更新后的内存管理信息记录在目标内存对应的内存管理结构中,以便所述第一获取单元利用更新后的内存管理信息执行所述获取目标内存的内存管理信息的步骤。可选的,所述装置还包括第二获取单元、确定单元、第一插入单元和初始化单元:所述第二获取单元,用于获取内存分配请求,所述内存分配请求中包括内存大小信息;所述确定单元,用于根据所述内存分配请求确定内存池中对应的内存空闲链表;所述第一插入单元,用于取下所述内存空闲链表中的一个节点,将所述节点插入到已分配的内存链表中;所述初始化单元,用于初始化所述节点的内存管理信息及内存的校验值。可选的,若所述内存管理信息中包括内存引用的相关信息,所述目标内存具有校验值,在引用目标内存时,所述调试单元,用于根据所述内存管理信息确定所述目标内存是否已被释放;若是,则触发程序崩溃;若否,则根据所述目标内存的校验值确定是否存在缓冲区溢出;若存在,则触发程序崩溃。可选的,若所述内存管理信息中包括内存引用的相关信息和内存释放的相关信息,所述目标内存具有校验值,在释放目标内存时,所述调试单元,用于根据所述内存管理信息确定目标内存是否已被释放;若是,则触发程序崩溃;若否,则根据所述目标内存的校验值确定是否存在缓冲区溢出;若存在,则触发程序崩溃。可选的,若所述引用的相关信息包括内存引用计数,根据所述目标内存的校验值确定不存在缓冲区溢出,所述更新单元,用于减少所述内存引用计数。可选的,所述装置还包括判断单元和第二插入单元:所述判断单元,用于判断所述内存引用计数是否为零;所述第二插入单元,用于若是,则将所述目标内存对应的节点从所述已分配内存链表中取下,并插入所述内存空闲链表。可选的,所述调试单元,用于扫描所述已分配内存链表,查看目标内存的分配时间是否超过预设阈值;若是,则确定所述目标内存出现内存错误,并根据所述目标内存对应的内存管理信息对所述内存错误进行调试。由上述技术方案可以看出,本申请实施例具有以下优点:该方法由内存池管理动态申请的内存,内存池包括至少一个内存空闲链表,每个内存空闲链表中包括至少一个链表节点,每个链表节点对应的内存由一个内存管理结构记录内存管理信息,在引用、释放目标内存时,可以获取目标内存的内存管理信息,内存管理信息可以反映出是否出现内存错误以及内存错误的位置,这样,当出现内存错误时便可以根据内存管理信息对内存错误进行调试。在未出现内存错误时,可以执行引用、释放目标内存的操作,并更新内存管理信息,以便后续利用更新后的内存管理信息执行获取目标内存的内存管理信息的步骤。可见,通过内存池中记录的内存管理信息可以发现和定位这些比较复杂的内存错误,从而对复杂的内存错误进行调试。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单本文档来自技高网...

【技术保护点】
1.一种基于内存池的内存错误调试方法,其特征在于,内存池管理动态申请的内存,所述内存池包括至少一个内存空闲链表,每个内存空闲链表中包括至少一个链表节点,每个链表节点对应的内存由一个内存管理结构记录内存管理信息,所述方法包括:获取目标内存的内存管理信息,所述内存管理信息中至少包括内存分配、内存引用和内存释放的相关信息;若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试;若根据所述内存管理信息确定所述目标内存未出现内存错误,则更新所述内存管理信息,将更新后的内存管理信息记录在所述目标内存对应的内存管理结构中,以便后续利用所述更新后的内存管理信息执行所述获取目标内存的内存管理信息的步骤。

【技术特征摘要】
1.一种基于内存池的内存错误调试方法,其特征在于,内存池管理动态申请的内存,所述内存池包括至少一个内存空闲链表,每个内存空闲链表中包括至少一个链表节点,每个链表节点对应的内存由一个内存管理结构记录内存管理信息,所述方法包括:获取目标内存的内存管理信息,所述内存管理信息中至少包括内存分配、内存引用和内存释放的相关信息;若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试;若根据所述内存管理信息确定所述目标内存未出现内存错误,则更新所述内存管理信息,将更新后的内存管理信息记录在所述目标内存对应的内存管理结构中,以便后续利用所述更新后的内存管理信息执行所述获取目标内存的内存管理信息的步骤。2.根据权利要求1所述的方法,其特征在于,在所述获取目标内存的内存管理信息之前,所述方法还包括:获取内存分配请求,所述内存分配请求中包括内存大小信息;根据所述内存分配请求确定内存池中对应的内存空闲链表;取下所述内存空闲链表中的一个节点,将所述节点插入到已分配的内存链表中;初始化所述节点的内存管理信息及内存的校验值。3.根据权利要求1所述的方法,其特征在于,若所述内存管理信息中包括内存引用的相关信息,所述目标内存具有校验值,在引用目标内存时,所述若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试,包括:根据所述内存管理信息确定所述目标内存是否已被释放;若是,则触发程序崩溃;若否,则根据所述目标内存的校验值确定是否存在缓冲区溢出;若存在,则触发程序崩溃。4.根据权利要求1所述的方法,其特征在于,若所述内存管理信息中包括内存引用的相关信息和内存释放的相关信息,所述目标内存具有校验值,在释放目标内存时,所述若根据所述内存管理信息确定所述目标内存出现内存错误,则对所述内存错误进行调试,包括:根据所述内存管理信息确定目标内存是否已被释放;若是,则触发程序崩溃;若否,则根据所述目标内存的校验值确定是否存在缓冲区溢出;若存在,则触发程序崩溃。5.根据权利要求4所述的方法,其特征在于,若所述引用的相关信息包括内存引用计数,根据所述目标内存的校验值确定不存在缓冲区溢出,所述更新所述内存管理信息,包括:减少所述内存引用计数。6.根据权利...

【专利技术属性】
技术研发人员:邸忠辉
申请(专利权)人:郑州云海信息技术有限公司
类型:发明
国别省市:河南,41

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1