CN111338864A - 内存问题检测方法、装置、计算机设备及存储介质 - Google Patents
内存问题检测方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN111338864A CN111338864A CN202010100737.6A CN202010100737A CN111338864A CN 111338864 A CN111338864 A CN 111338864A CN 202010100737 A CN202010100737 A CN 202010100737A CN 111338864 A CN111338864 A CN 111338864A
- Authority
- CN
- China
- Prior art keywords
- memory
- address
- abnormal
- code
- determining
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2273—Test methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明提供了一种内存问题检测方法、装置、计算机设备及存储介质,涉及计算机技术领域,通过在计算机设备内嵌入记录内存操作的使用历史信息的目标数据结构,在发生内存问题时通过回溯查看记录内存操作的使用历史信息,可以定位到被野指针操作破坏内存数据的代码行,进而可以有效定位到导致内存问题的异常代码块,与现有技术中基于日志的压力测试跟踪分析方式相比,本发明不需要反复修改测试代码,提高了检测效率,从而缩短了内存问题的解决周期。
Description
技术领域
本发明涉及计算机技术领域,尤其是涉及一种内存问题检测方法、装置、计算机设备及存储介质。
背景技术
在诸如手机或计算机等计算机设备的启动初期的BIOS(Basic Input OutputSystem,基本输入输出系统)启动阶段,如果有野指针非法访问了计算机设备的某个内存区域,则该内存区域的数据可能会被破坏,导致计算机设备在BIOS启动阶段无法开机或反复重启,其中,野指针为指向的位置是不可知的(随机的、不正确的、没有明确限制的)的指针。计算机设备售出后,一旦出现此类致命问题,会严重影响产品质量和用户体验,容易引起售后客诉。因此,需要在售出计算机设备前,对计算机设备进行内存问题检测,找到该计算机设备中导致内存发生异常问题的代码点(即代码行的位置),以便从根本上解决该类内存问题。
因BIOS启动阶段下代码的执行环境比较苛刻,调试手段非常有限,而且上述内存问题发生的概率较低,因此通常需要反复修改测试代码并添加日志,来进行压力测试跟踪分析,逐步缩小范围才能定位到发生异常问题的代码点。这种内存问题检测方式人力消耗较大、费时较长,导致检测效率较低,从而严重影响了内存问题的解决周期。
发明内容
本发明的目的在于提供一种内存问题检测方法、装置、计算机设备及存储介质,以提高检测效率,从而缩短内存问题的解决周期。
本发明实施例提供了一种内存问题检测方法,应用于嵌入有目标数据结构的计算机设备,该目标数据结构用于记录内存操作的使用历史信息;该方法包括:
获取上述计算机设备在BIOS启动阶段的测试数据,该测试数据包括异常内存地址和使用历史信息;
根据使用历史信息,确定异常内存地址对应的目标代码地址;
根据目标代码地址,确定上述计算机设备中导致内存问题的异常代码块。
进一步地,获取上述计算机设备在BIOS启动阶段的异常内存地址的步骤,包括:
监测上述计算机设备在BIOS启动阶段出现的野指针;
将监测到的野指针所指向的地址确定为异常内存地址。
进一步地,上述使用历史信息包括多条内存信息,每条内存信息均包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;根据使用历史信息,确定异常内存地址对应的目标代码地址的步骤,包括:
根据每条内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条内存信息对应的内存地址范围;
从各条内存信息对应的内存地址范围中,查找出异常内存地址所属的目标地址范围;
将目标地址范围对应的内存信息中的所操作内存的代码地址确定为异常内存地址对应的目标代码地址。
进一步地,根据目标代码地址,确定上述计算机设备中导致内存问题的异常代码块的步骤,包括:
确定目标代码地址对应的源码行;
将源码行所在的源码块确定为上述计算机设备中导致内存问题的异常代码块,以使用户基于该异常代码块确定导致内存问题的根因代码。
进一步地,上述使用历史信息按照使用所操作内存的模块分类,并以链表形式存储。
本发明实施例还提供了一种内存问题检测装置,应用于嵌入有目标数据结构的计算机设备,该目标数据结构用于记录内存操作的使用历史信息;该装置包括:
数据获取模块,用于获取上述计算机设备在BIOS启动阶段的测试数据,该测试数据包括异常内存地址和使用历史信息;
第一确定模块,用于根据使用历史信息,确定异常内存地址对应的目标代码地址;
第二确定模块,用于根据目标代码地址,确定上述计算机设备中导致内存问题的异常代码块。
进一步地,上述使用历史信息包括多条内存信息,每条内存信息均包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;上述第一确定模块具体用于:
根据每条内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条内存信息对应的内存地址范围;
从各条内存信息对应的内存地址范围中,查找出异常内存地址所属的目标地址范围;
将目标地址范围对应的内存信息中的所操作内存的代码地址确定为异常内存地址对应的目标代码地址。
进一步地,上述第二确定模块具体用于:
确定目标代码地址对应的源码行;
将源码行所在的源码块确定为上述计算机设备中导致内存问题的异常代码块,以使用户基于该异常代码块确定导致内存问题的根因代码。
本发明实施例还提供了一种计算机设备,包括存储器、处理器,该存储器中存储有可在处理器上运行的计算机程序,该处理器执行该计算机程序时实现上述的内存问题检测方法。
本发明实施例还提供了一种存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述的内存问题检测方法。
本发明实施例提供的内存问题检测方法、装置、计算机设备及存储介质中,该方法应用于嵌入有目标数据结构的计算机设备,目标数据结构用于记录内存操作的使用历史信息;该方法包括:获取计算机设备在BIOS启动阶段的测试数据,该测试数据包括异常内存地址和使用历史信息;根据使用历史信息,确定异常内存地址对应的目标代码地址;根据目标代码地址,确定计算机设备中导致内存问题的异常代码块。这样,在发生内存问题时通过回溯查看记录内存操作的使用历史信息,就可以基于查找到的目标代码地址定位到导致内存问题的异常代码块,与现有技术中基于日志的压力测试跟踪分析方式相比,不需要反复修改测试代码,提高了检测效率,从而缩短了内存问题的解决周期。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种内存问题检测方法的流程示意图;
图2为本发明实施例提供的一种检测内存问题的用户操作流程示意图;
图3为本发明实施例提供的一种内存问题检测装置的结构示意图;
图4为本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前BIOS启动阶段下内存问题的检测,存在人力消耗较大、费时较长的问题,导致检测效率较低,从而严重影响了内存问题的解决周期,拖延了相关项目的开发进度。基于此,本发明实施例提供的一种内存问题检测方法、装置、计算机设备及存储介质,在计算机设备现有的硬件和软件条件下,通过在计算机设备中嵌入记录内存操作的使用历史信息的数据结构,可以在BIOS启动阶段有效定位导致内存被破坏问题的异常代码块,占用代码存储空间少且检测效率高,有力地缩短了项目开发周期中内存问题的解决周期,节省了开发资源,提升了工作效率。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种内存问题检测方法进行详细介绍。
本发明实施例提供了一种内存问题检测方法,该方法应用于嵌入有目标数据结构的计算机设备,该目标数据结构用于记录内存操作的使用历史信息,该计算机设备可以为台式机、服务器、笔记本电脑、平板电脑或手机等。参见图1所示的一种内存问题检测方法的流程示意图,该方法包括如下步骤S102至步骤S106:
步骤S102,获取计算机设备在BIOS启动阶段的测试数据,该测试数据包括异常内存地址和使用历史信息。
对于内嵌有记录内存操作的使用历史信息的目标数据结构的计算机设备,在该计算机设备的BIOS启动阶段,一旦有野指针非法访问了该计算机设备的某个内存区域,并破坏了该内存区域的数据,导致该计算机设备无法开机或反复重启,则获取该过程中野指针所指向的地址和目标数据结构所记录的使用历史信息,并将获取到的地址和使用历史信息作为测试数据。
上述使用历史信息可以包括多条内存信息,每条内存信息均可以包括所操作内存的代码地址(代码地址与代码行对应)、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;其中,所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址可以限定一个内存地址范围。使用所操作内存的模块是指该模块使用了所操作内存,模块可以是一个应用程序。
为了便于查询,使用历史信息可以按照使用所操作内存的模块分类,并以链表形式存储,也即每个模块对应的使用历史信息存储在一个链表内,不同模块对应的使用历史信息存储在不同的链表内。由于内存操作包括内存分配或内存释放,因此,所操作内存的代码地址可以为所分配内存的代码地址或所释放内存的代码地址,所操作内存的大小可以为所分配内存的大小或所释放内存的大小,使用所操作内存的模块可以为使用所分配内存的模块或使用所释放内存的模块,所操作内存的起始地址可以为所分配内存的起始地址或所释放内存的起始地址。
比如,在setup module源代码的第100行(假设编译时生成此行源码对应的二进制代码地址为0x5000)进行了32bytes的内存分配操作,且此次分配出来的内存起始地址为0x1000,那么此次内存操作对应的内存信息A存储在setup对应的链表内,该链表内记录了module(即使用所分配内存的模块)为setup,操作类型为malloc(malloc表示内存分配操作),所分配内存的起始地址为0x1000,内存size(即所分配内存的大小)为32bytes,分配操作的代码地址(即所分配内存的代码地址)为0x5000。
同理,假设仍然在setup module源代码的第200行进行了32bytes的内存释放操作,释放操作的代码地址为0x7000,且此次释放出来的内存起始地址为0x1000,则此次内存操作对应的内存信息B仍然存储在setup对应的链表内,该链表内同样记录了module(使用所释放内存的模块)为setup,操作类型为free(free表示内存释放操作),所释放内存的起始地址为0x1000,内存size(即所释放内存的大小)为32bytes,释放操作的代码地址(即所释放内存的代码地址)为0x7000。
可选地,获取计算机设备在BIOS启动阶段的异常内存地址的过程可以如下:监测计算机设备在BIOS启动阶段出现的野指针,并将监测到的野指针所指向的地址确定为异常内存地址。
步骤S104,根据使用历史信息,确定异常内存地址对应的目标代码地址。
可选地,考虑到异常内存地址可能并不一定是起始地址,步骤S104可以通过如下过程实现:根据每条内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条内存信息对应的内存地址范围;从各条内存信息对应的内存地址范围中,查找出异常内存地址所属的目标地址范围;将目标地址范围对应的内存信息中的所操作内存的代码地址确定为异常内存地址对应的目标代码地址。
需要说明的是,多个模块可能对同一块内存区域进行了分配操作和/或释放操作,而一个模块的一个内存操作对应一个目标代码地址,因此查找到的目标代码地址可能为多个,例如模块1和模块2均对某内存区域进行了分配操作和释放操作,则目标代码地址为4个。
例如,根据上述的内存信息A和内存信息B可知,setup module对内存地址范围:0x1000~0x1020(即0x1000+32)所在的内存区域进行了分配操作和释放操作;假设发生内存错误的地址(即异常内存地址)为0x1016,由于0x1016位于0x1000~0x1020内,因此可以在使用历史信息中查找到内存信息A中的代码地址0x5000和内存信息B中的代码地址0x7000,也即目标代码地址为0x5000和0x7000。
这样无论异常内存地址是否为起始地址,均可以准确定位出对应的目标代码地址,提高了定位目标代码地址的可靠性。
步骤S106,根据目标代码地址,确定计算机设备中导致内存问题的异常代码块。
源码块(即源代码块或代码块)是用大括号(即{})将多行源代码封装在一起,所形成的独立的数据体,源码块用于实现特定的算法;上述异常代码块是指导致内存问题的源码块。目标代码地址用于表征相应源码行(即源代码行或代码行)的位置,也即通过目标代码地址可以查找到相应的源码行,进而可以确定异常代码块。
可选地,步骤S106可以通过如下过程实现:确定目标代码地址对应的源码行;将该源码行所在的源码块,确定为计算机设备中导致内存问题的异常代码块,以使用户基于该异常代码块确定导致内存问题的根因代码。这里的根因代码是指异常代码块中导致内存问题的目标源码行,该目标源码行是用户分析得到的,该目标源码行可能包括目标代码地址对应的源码行,也可能包括异常代码块中的其他源码行。
具体实现时,计算机设备中存储有预设的代码地址与源码行的对应关系,通过查找该对应关系,可以得到目标代码地址对应的源码行,也即得到目标代码地址所映射的具体源码行;然后基于源码行可以定位出异常问题发生时上下文的源码块,也即定位出源码行所在的源码块,该源码块即为异常代码块。这样实现了异常代码块的准确定位,用户只需对该异常代码块进行分析,即可得到导致内存问题的根因代码。
例如,已知目标代码地址为0x5000和0x7000,根据上述的对应关系(包括代码地址0x5000对应源码行的第100行,代码地址0x7000对应源码行的第200行),就可以定位到相应的源码行;再根据源码行确定与发生内存错误相关联的源码块,然后人工对源码块的源代码进行审查,即可分析定位出问题的根因代码。
本发明实施例中,通过在计算机设备内嵌入记录内存操作的使用历史信息的目标数据结构,在发生内存问题时通过回溯查看记录内存操作的使用历史信息,可以定位到被野指针操作破坏内存数据的代码行,进而可以有效定位到导致内存问题的异常代码块,与现有技术中基于日志的压力测试跟踪分析方式相比,该内存问题检测方法不需要反复修改测试代码,提高了检测效率,从而缩短了内存问题的解决周期。
为了便于理解,本发明实施例还提供了一种检测内存问题的用户操作流程,参见图2所示的一种检测内存问题的用户操作流程示意图,该用户操作流程主要包括如下步骤:
步骤S202,定义一个用于记录内存操作的使用历史信息的数据结构。
上述数据结构包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址等成员。
步骤S204,将上述数据结构嵌入在计算机设备中内存操作的代码入口处。
可以将上述数据结构嵌入在计算机设备中内存分配的API(ApplicationProgramming Interface,应用程序接口)处和内存释放的API处。
步骤S206,定义一个与上述数据结构绑定的全局变量链表结构,以使该数据结构记录的使用历史信息以该全局变量链表结构存储。
在存储上述数据结构记录的使用历史信息时,可以将各条内存信息按照使用所操作内存的模块分类,并将相同类别的内存信息以链表指针的方式串接在一起,构造出每次内存操作的历史全景图。历史全景图指由内存操作对应的使用历史信息形成的操作痕迹图。
步骤S208,启动上述计算机设备,并获取该计算机设备中导致内存问题的异常代码块。
获取该计算机设备中导致内存问题的异常代码块的具体过程可以参见前述实施例的相关内容,这里不再赘述。
步骤S210,对上述异常代码块进行分析,得到导致内存问题的根因代码。
综上可知,本发明提供的内存问题检测方法,在现有的硬件和软件条件下,只需在待检测的计算机设备中嵌入记录内存操作的使用历史信息的目标数据结构,即可有效定位出导致内存问题的异常代码块,实现方案简单,内嵌代码修改少,占用ROM(Read-OnlyMemory,只读存储器)空间小,因而对ROM空间受限且调试手段缺乏的这种执行环境苛刻的BIOS启动阶段的内存问题检测非常适用,对内存问题的调试定位和分析极为有利,分析效率提升明显。
对应于上述的内存问题检测方法,本发明实施例还提供了一种内存问题检测装置,该装置也应用于嵌入有目标数据结构的计算机设备,该目标数据结构用于记录内存操作的使用历史信息。参见图3所示的一种内存问题检测装置的结构示意图,该装置包括:
数据获取模块32,用于获取计算机设备在BIOS启动阶段的测试数据,该测试数据包括异常内存地址和使用历史信息;
第一确定模块34,用于根据使用历史信息,确定异常内存地址对应的目标代码地址;
第二确定模块36,用于根据目标代码地址,确定计算机设备中导致内存问题的异常代码块。
本发明实施例中,通过在计算机设备内嵌入记录内存操作的使用历史信息的目标数据结构,在发生内存问题时通过回溯查看记录内存操作的使用历史信息,可以定位到被野指针操作破坏内存数据的代码行,进而可以有效定位到导致内存问题的异常代码块,与现有技术中基于日志的压力测试跟踪分析方式相比,该内存问题检测装置不需要反复修改测试代码,提高了检测效率,从而缩短了内存问题的解决周期。
可选地,上述数据获取模块32具体用于:监测计算机设备在BIOS启动阶段出现的野指针;将监测到的野指针所指向的地址确定为异常内存地址。
可选地,上述使用历史信息包括多条内存信息,每条内存信息均包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;上述第一确定模块34具体用于:根据每条内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条内存信息对应的内存地址范围;从各条内存信息对应的内存地址范围中,查找出异常内存地址所属的目标地址范围;将目标地址范围对应的内存信息中的所操作内存的代码地址确定为该异常内存地址对应的目标代码地址。
可选地,上述第二确定模块36具体用于:确定目标代码地址对应的源码行;将源码行所在的源码块确定为计算机设备中导致内存问题的异常代码块,以使用户基于该异常代码块确定导致内存问题的根因代码。
可选地,上述使用历史信息按照使用所操作内存的模块分类,并以链表形式存储。
本实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
参见图4,本发明实施例还提供一种计算机设备100,包括:处理器40,存储器41,总线42和通信接口43,处理器40、通信接口43和存储器41通过总线42连接;处理器40用于执行存储器41中存储的可执行模块,例如计算机程序。
其中,存储器41可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口43(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
总线42可以是ISA总线、PCI总线或EISA总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器41用于存储程序,处理器40在接收到执行指令后,执行上述程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器40中,或者由处理器40实现。
处理器40可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器40中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器40可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器41,处理器40读取存储器41中的信息,结合其硬件完成上述内存问题检测方法的步骤。
在一个实施例中,本发明实施例提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取计算机设备在BIOS启动阶段的测试数据,该测试数据包括异常内存地址和使用历史信息;根据使用历史信息,确定异常内存地址对应的目标代码地址;根据目标代码地址,确定计算机设备中导致内存问题的异常代码块。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:监测计算机设备在BIOS启动阶段出现的野指针;将监测到的野指针所指向的地址确定为异常内存地址。
在一个实施例中,使用历史信息包括多条内存信息,每条内存信息均包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;处理器执行计算机程序时还实现以下步骤:根据每条内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条内存信息对应的内存地址范围;从各条内存信息对应的内存地址范围中,查找出异常内存地址所属的目标地址范围;将目标地址范围对应的内存信息中的所操作内存的代码地址确定为异常内存地址对应的目标代码地址。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:确定目标代码地址对应的源码行;将源码行所在的源码块确定为计算机设备中导致内存问题的异常代码块,以使用户基于异常代码块确定导致内存问题的根因代码。
本发明实施例提供的计算机设备,在发生内存问题时通过回溯查看记录内存操作的使用历史信息,就可以基于查找到的目标代码地址定位到导致内存问题的异常代码块,与现有技术中基于日志的压力测试跟踪分析方式相比,不需要反复修改测试代码,提高了检测效率,从而缩短了内存问题的解决周期。
本发明实施例还提供了一种存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时执行前面方法实施例中所描述的内存问题检测方法。该存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
在一个实施例中,计算机程序被处理器执行时实现以下步骤:获取计算机设备在BIOS启动阶段的测试数据,该测试数据包括异常内存地址和使用历史信息;根据使用历史信息,确定异常内存地址对应的目标代码地址;根据目标代码地址,确定计算机设备中导致内存问题的异常代码块。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:监测计算机设备在BIOS启动阶段出现的野指针;将监测到的野指针所指向的地址确定为异常内存地址。
在一个实施例中,使用历史信息包括多条内存信息,每条内存信息均包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;计算机程序被处理器执行时还实现以下步骤:根据每条内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条内存信息对应的内存地址范围;从各条内存信息对应的内存地址范围中,查找出异常内存地址所属的目标地址范围;将目标地址范围对应的内存信息中的所操作内存的代码地址确定为异常内存地址对应的目标代码地址。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:确定目标代码地址对应的源码行;将源码行所在的源码块确定为计算机设备中导致内存问题的异常代码块,以使用户基于异常代码块确定导致内存问题的根因代码。
本发明实施例提供的存储介质,在发生内存问题时通过回溯查看记录内存操作的使用历史信息,就可以基于查找到的目标代码地址定位到导致内存问题的异常代码块,与现有技术中基于日志的压力测试跟踪分析方式相比,不需要反复修改测试代码,提高了检测效率,从而缩短了内存问题的解决周期。
在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
附图中的流程图和框图显示了根据本发明的多个实施例的方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种内存问题检测方法,其特征在于,应用于嵌入有目标数据结构的计算机设备,所述目标数据结构用于记录内存操作的使用历史信息;所述方法包括:
获取所述计算机设备在BIOS启动阶段的测试数据,所述测试数据包括异常内存地址和使用历史信息;
根据所述使用历史信息,确定所述异常内存地址对应的目标代码地址;
根据所述目标代码地址,确定所述计算机设备中导致内存问题的异常代码块。
2.根据权利要求1所述的方法,其特征在于,获取所述计算机设备在BIOS启动阶段的异常内存地址的步骤,包括:
监测所述计算机设备在BIOS启动阶段出现的野指针;
将监测到的野指针所指向的地址确定为异常内存地址。
3.根据权利要求1所述的方法,其特征在于,所述使用历史信息包括多条内存信息,每条所述内存信息均包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;根据所述使用历史信息,确定所述异常内存地址对应的目标代码地址的步骤,包括:
根据每条所述内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条所述内存信息对应的内存地址范围;
从各条所述内存信息对应的内存地址范围中,查找出所述异常内存地址所属的目标地址范围;
将所述目标地址范围对应的内存信息中的所操作内存的代码地址确定为所述异常内存地址对应的目标代码地址。
4.根据权利要求1所述的方法,其特征在于,根据所述目标代码地址,确定所述计算机设备中导致内存问题的异常代码块的步骤,包括:
确定所述目标代码地址对应的源码行;
将所述源码行所在的源码块确定为所述计算机设备中导致内存问题的异常代码块,以使用户基于所述异常代码块确定导致内存问题的根因代码。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述使用历史信息按照使用所操作内存的模块分类,并以链表形式存储。
6.一种内存问题检测装置,其特征在于,应用于嵌入有目标数据结构的计算机设备,所述目标数据结构用于记录内存操作的使用历史信息;所述装置包括:
数据获取模块,用于获取所述计算机设备在BIOS启动阶段的测试数据,所述测试数据包括异常内存地址和使用历史信息;
第一确定模块,用于根据所述使用历史信息,确定所述异常内存地址对应的目标代码地址;
第二确定模块,用于根据所述目标代码地址,确定所述计算机设备中导致内存问题的异常代码块。
7.根据权利要求6所述的装置,其特征在于,所述使用历史信息包括多条内存信息,每条所述内存信息均包括所操作内存的代码地址、所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址;所述第一确定模块具体用于:
根据每条所述内存信息中的所操作内存的大小、使用所操作内存的模块和所操作内存的起始地址,确定每条所述内存信息对应的内存地址范围;
从各条所述内存信息对应的内存地址范围中,查找出所述异常内存地址所属的目标地址范围;
将所述目标地址范围对应的内存信息中的所操作内存的代码地址确定为所述异常内存地址对应的目标代码地址。
8.根据权利要求6所述的装置,其特征在于,所述第二确定模块具体用于:
确定所述目标代码地址对应的源码行;
将所述源码行所在的源码块确定为所述计算机设备中导致内存问题的异常代码块,以使用户基于所述异常代码块确定导致内存问题的根因代码。
9.一种计算机设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-5中任一项所述的方法。
10.一种存储介质,所述存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行权利要求1-5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010100737.6A CN111338864B (zh) | 2020-02-18 | 2020-02-18 | 内存问题检测方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010100737.6A CN111338864B (zh) | 2020-02-18 | 2020-02-18 | 内存问题检测方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111338864A true CN111338864A (zh) | 2020-06-26 |
CN111338864B CN111338864B (zh) | 2023-08-18 |
Family
ID=71181662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010100737.6A Active CN111338864B (zh) | 2020-02-18 | 2020-02-18 | 内存问题检测方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111338864B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112783912A (zh) * | 2021-02-03 | 2021-05-11 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN113760617A (zh) * | 2021-08-17 | 2021-12-07 | 联想(北京)有限公司 | 故障处理方法及装置、设备、存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7055055B1 (en) * | 1999-04-23 | 2006-05-30 | Symantec Corporation | Write cache flushing method for reducing data corruption |
CN101169752A (zh) * | 2007-11-26 | 2008-04-30 | 中兴通讯股份有限公司 | 一种捕获导致内存被野指针改写的函数的方法 |
CN106557300A (zh) * | 2015-09-24 | 2017-04-05 | 腾讯科技(深圳)有限公司 | 一种野指针的函数栈信息确定方法、装置及电子设备 |
CN109583200A (zh) * | 2017-09-28 | 2019-04-05 | 中国科学院软件研究所 | 一种基于动态污点传播的程序异常分析方法 |
CN110334031A (zh) * | 2019-07-16 | 2019-10-15 | 腾讯科技(深圳)有限公司 | 内存分配代码检测方法、装置、计算机设备及存储介质 |
-
2020
- 2020-02-18 CN CN202010100737.6A patent/CN111338864B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7055055B1 (en) * | 1999-04-23 | 2006-05-30 | Symantec Corporation | Write cache flushing method for reducing data corruption |
CN101169752A (zh) * | 2007-11-26 | 2008-04-30 | 中兴通讯股份有限公司 | 一种捕获导致内存被野指针改写的函数的方法 |
CN106557300A (zh) * | 2015-09-24 | 2017-04-05 | 腾讯科技(深圳)有限公司 | 一种野指针的函数栈信息确定方法、装置及电子设备 |
CN109583200A (zh) * | 2017-09-28 | 2019-04-05 | 中国科学院软件研究所 | 一种基于动态污点传播的程序异常分析方法 |
CN110334031A (zh) * | 2019-07-16 | 2019-10-15 | 腾讯科技(深圳)有限公司 | 内存分配代码检测方法、装置、计算机设备及存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112783912A (zh) * | 2021-02-03 | 2021-05-11 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN112783912B (zh) * | 2021-02-03 | 2023-10-13 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN113760617A (zh) * | 2021-08-17 | 2021-12-07 | 联想(北京)有限公司 | 故障处理方法及装置、设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111338864B (zh) | 2023-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193750B (zh) | 一种脚本录制方法和装置 | |
CN108459962B (zh) | 代码规范性检测方法、装置、终端设备及存储介质 | |
CN109271359B (zh) | 日志信息处理方法、装置、电子设备及可读存储介质 | |
CN110992992A (zh) | 一种硬盘测试方法、设备以及存储介质 | |
US20210357235A1 (en) | Method, device, apparatus for identifying graphics card of gpu server and medium | |
US10013335B2 (en) | Data flow analysis in processor trace logs using compiler-type information method and apparatus | |
CN112149136A (zh) | loT设备固件漏洞的检测方法、系统及电子设备 | |
CN112068852B (zh) | 基于国产服务器的开源软件安装方法、系统及设备和介质 | |
WO2018040270A1 (zh) | 在Windows系统中加载Linux系统ELF文件的方法及装置 | |
CN111338864B (zh) | 内存问题检测方法、装置、计算机设备及存储介质 | |
CN110737594A (zh) | 自动生成测试用例的数据库标准符合性测试方法及装置 | |
CN107480056B (zh) | 一种软件测试方法和装置 | |
CN110580220B (zh) | 测量代码段执行时间的方法及终端设备 | |
CN111597069A (zh) | 程序处理方法、装置、电子设备和存储介质 | |
CN111104157A (zh) | 一种存储设备量产方法、装置、存储介质及电子设备 | |
CN112133357B (zh) | 一种eMMC的测试方法及装置 | |
CN112181479A (zh) | 代码文件版本间差异的确定方法、装置及电子设备 | |
CN112835779A (zh) | 测试用例确定方法、装置、计算机设备 | |
CN116401086A (zh) | 内存漏斗错误上报机制的测试方法、装置、设备及介质 | |
US20220188221A1 (en) | Regression testing method and regression testing apparatus | |
CN114153712A (zh) | 异常处理方法、装置、设备及存储介质 | |
CN112631905A (zh) | 执行过程数据管理方法、装置、计算机设备及存储介质 | |
CN113535580A (zh) | 一种cts测试方法、装置及测试设备 | |
CN110096888B (zh) | 一种加快验证及分析smm安全隐患的方法及系统 | |
CN112698837A (zh) | 基于软件基因的动态行为与二进制代码匹配方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |