掌桥专利:专业的专利平台
掌桥专利
首页

内存数据转储及构建方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 12:13:22


内存数据转储及构建方法、装置、电子设备及存储介质

技术领域

本公开的实施例涉及一种内存数据转储方法及装置、内存数据构建方法及装置、电子设备及存储介质。

背景技术

在软件自动化测试或应用程序调试过程中,通常需要将内存中的数据转储到存储设备中,以便相关技术人员事后进行问题定位。内存转储所生成的内存转储文件又称为内存镜像,该内存转储文件记录了内存中的数据,可以用于内存数据重建。

发明内容

本公开至少一个实施例提供一种内存数据转储方法,包括:获取内存中的多个缓冲区存储的数据,其中,所述多个缓冲区至少包括第一缓冲区和第二缓冲区,所述第一缓冲区存储有指向所述第二缓冲区的第一指针;基于所述数据建立多个对象结构,其中,所述多个对象结构至少包括第一对象结构和第二对象结构,所述第一对象结构表示所述第一缓冲区中存储的第一数据,所述第二对象结构表示所述第二缓冲区中存储的第二数据;根据所述第一指针表示的引用关系,将所述第二对象结构嵌套在所述第一对象结构中,以得到目标对象结构,从而用于生成内存转储文件;其中,所述目标对象结构包括第一嵌套字段,所述第一嵌套字段表示所述第一指针,所述第一嵌套字段的数据格式及数据内容与所述第二对象结构的数据格式及数据内容相同。

例如,在本公开一实施例提供的方法中,所述第二对象结构采用第一数据格式,所述第一数据格式基于扩展JSON格式得到。

例如,在本公开一实施例提供的方法中,所述第一数据格式包括类型元素和实体元素,所述类型元素至少包括对象地址、对象标识和地址宽度,所述对象地址表示所述第一数据格式所属的对象结构所对应的缓冲区的地址,所述对象标识表示所述第一数据格式所属的对象结构的识别号,所述地址宽度表示所述对象地址的宽度,所述实体元素包括所述对象地址所指向的缓冲区中存储的数据。

例如,在本公开一实施例提供的方法中,所述多个缓冲区还包括第三缓冲区,所述第二缓冲区存储有指向所述第三缓冲区的第二指针,所述多个对象结构还包括第三对象结构,所述第三对象结构表示所述第三缓冲区中存储的第三数据;所述方法还包括:根据所述第二指针表示的引用关系,将所述第三对象结构嵌套在所述第二对象结构中,以更新所述第二对象结构;其中,所述目标对象结构还包括第二嵌套字段,所述第二嵌套字段表示所述第二指针,所述第二嵌套字段的数据格式及数据内容与所述第三对象结构的数据格式及数据内容相同;其中,所述实体元素表示为数组的形式,所述第三对象结构的数据格式与所述第一数据格式相同。

例如,在本公开一实施例提供的方法中,所述第一数据格式以“名称字段:值字段”的形式表示,所述名称字段包括所述对象地址、所述对象标识和所述地址宽度,所述对象地址以“对象地址名称:对象地址字面量”的形式表示,所述对象标识以“对象标识名称:对象标识字面量”的形式表示,所述地址宽度以“地址宽度名称:地址宽度字面量”的形式表示,所述值字段包括所述实体元素所组成的数组。

例如,在本公开一实施例提供的方法中,所述第一数据格式以多个基本字段的形式表示,所述多个基本字段分别表示所述对象地址、所述对象标识、所述地址宽度以及所述实体元素,每个基本字段均以“名称:值”的形式表示。

例如,在本公开一实施例提供的方法中,所述目标对象结构还包括引用嵌套字段,当所述第一指针所表示的引用关系在所述目标对象结构中再次出现时,以所述引用嵌套字段表示所述第一指针,所述引用嵌套字段采用第二数据格式,其中,所述第二数据格式包括引用标识元素和内容元素,所述引用标识元素包括预设字符串,所述内容元素与所述第一数据格式中的类型元素相同。

例如,在本公开一实施例提供的方法中,所述数组以字面量的形式记录在所述第一数据格式中。

例如,在本公开一实施例提供的方法中,所述数组以二进制文件的形式链接在所述第一数据格式中。

例如,本公开一实施例提供的方法还包括:对所述目标对象结构进行串行化处理,以生成所述内存转储文件。

本公开至少一个实施例还提供一种内存数据构建方法,包括:由内存转储文件得到目标对象结构,并为所述目标对象结构分配第一缓冲区,其中,所述目标对象结构包括第一嵌套字段,所述第一嵌套字段表示第一指针;基于所述目标对象结构得到第一对象结构,在所述第一缓冲区中构建对应于所述第一对象结构的第一数据,并且为所述第一嵌套字段分配第二缓冲区,将所述第二缓冲区的地址存入所述第一缓冲区中对应于所述第一嵌套字段的位置,以实现所述第一指针的引用关系;基于所述第一嵌套字段得到第二对象结构,在所述第二缓冲区中构建对应于所述第二对象结构的第二数据。

例如,在本公开一实施例提供的方法中,基于所述目标对象结构得到所述第一对象结构,包括:遍历所述目标对象结构的实体元素,根据所述实体元素的数据格式识别所述实体元素为所述第一嵌套字段或实体数据;在所述第一缓冲区中构建对应于所述第一对象结构的所述第一数据,包括:响应于所述实体元素为所述实体数据,将所述实体数据存入所述第一缓冲区。

例如,在本公开一实施例提供的方法中,在所述第一缓冲区中构建对应于所述第一对象结构的所述第一数据,还包括:响应于所述实体元素为所述第一嵌套字段,将所述第一嵌套字段中的对象地址存入所述第一缓冲区;将所述第二缓冲区的地址存入所述第一缓冲区中对应于所述第一嵌套字段的位置,包括:在为所述第一嵌套字段分配所述第二缓冲区之后,将所述第一缓冲区中存储的对象地址替换为所述第二缓冲区的地址。

例如,在本公开一实施例提供的方法中,将所述第二缓冲区的地址存入所述第一缓冲区中对应于所述第一嵌套字段的位置,包括:在为所述第一嵌套字段分配所述第二缓冲区之后,响应于所述实体元素为所述第一嵌套字段,将所述第二缓冲区的地址存入所述第一缓冲区中对应于所述第一嵌套字段的位置。

例如,本公开一实施例提供的方法还包括:进行地址映射,以构建对应于所述内存转储文件的内存数据。

本公开至少一个实施例还提供一种内存数据转储装置,包括:数据获取单元,配置为获取内存中的多个缓冲区存储的数据,其中,所述多个缓冲区至少包括第一缓冲区和第二缓冲区,所述第一缓冲区存储有指向所述第二缓冲区的第一指针;对象结构建立单元,配置为基于所述数据建立多个对象结构,其中,所述多个对象结构至少包括第一对象结构和第二对象结构,所述第一对象结构表示所述第一缓冲区中存储的第一数据,所述第二对象结构表示所述第二缓冲区中存储的第二数据;嵌套单元,配置为根据所述第一指针表示的引用关系,将所述第二对象结构嵌套在所述第一对象结构中,以得到目标对象结构,从而用于生成内存转储文件;其中,所述目标对象结构包括第一嵌套字段,所述第一嵌套字段表示所述第一指针,所述第一嵌套字段的数据格式及数据内容与所述第二对象结构的数据格式及数据内容相同。

本公开至少一个实施例还提供一种内存数据构建装置,包括:获取单元,配置为由内存转储文件得到目标对象结构,并为所述目标对象结构分配第一缓冲区,其中,所述目标对象结构包括第一嵌套字段,所述第一嵌套字段表示第一指针;第一构建单元,配置为基于所述目标对象结构得到第一对象结构,在所述第一缓冲区中构建对应于所述第一对象结构的第一数据,并且为所述第一嵌套字段分配第二缓冲区,将所述第二缓冲区的地址存入所述第一缓冲区中对应于所述第一嵌套字段的位置,以实现所述第一指针的引用关系;第二构建单元,配置为基于所述第一嵌套字段得到第二对象结构,在所述第二缓冲区中构建对应于所述第二对象结构的第二数据。

本公开至少一个实施例还提供一种电子设备,包括本公开任一实施例提供的内存数据转储装置或内存数据构建装置。

本公开至少一个实施例还提供一种电子设备,包括:处理器;存储器,包括一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现本公开任一实施例提供的内存数据转储方法或内存数据构建方法的指令。

本公开至少一个实施例还提供一种存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例提供的内存数据转储方法或内存数据构建方法。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。

图1为内存转储的原理示意图;

图2A为标准JSON格式的简单字符串方式的示意图;

图2B为一种内存转储文件的数据格式示意图;

图3A为本公开一些实施例提供的一种内存数据转储方法的流程示意图;

图3B为本公开一些实施例提供的另一种内存数据转储方法的流程示意图;

图4A为本公开一些实施例提供的内存数据转储方法中的第一对象结构的示意图;

图4B为本公开一些实施例提供的内存数据转储方法所采用的第一数据格式的示意图;

图4C为本公开一些实施例提供的内存数据转储方法中的目标对象结构的示意图;

图4D为图4B所示的第一数据格式中的第二嵌套字段的数据格式示意图;

图4E为本公开一些实施例提供的内存数据转储方法所采用的另一种第一数据格式的示意图;

图5为本公开一些实施例提供的目标对象结构的代码示意图;

图6为本公开一些实施例提供的另一种内存数据转储方法所采用的第一数据格式的示意图;

图7为本公开一些实施例提供的一种内存数据转储方法所采用的第二数据格式的示意图;

图8为本公开一些实施例提供的引用嵌套字段的代码示意图;

图9为本公开一些实施例提供的一种内存数据转储方法所采用的第一数据格式的示意图;

图10为本公开一些实施例提供的另一种内存数据转储方法的流程示意图;

图11为本公开一些实施例提供的一种内存数据构建方法的流程示意图;

图12A为图11中步骤S22的一种流程示意图;

图12B为图11中步骤S22的另一种流程示意图;

图13为本公开一些实施例提供的另一种内存数据构建方法的流程示意图;

图14为本公开一些实施例提供的一种内存数据转储装置的示意框图;

图15为本公开一些实施例提供的一种内存数据构建装置的示意框图;

图16为本公开一些实施例提供的一种电子设备的示意框图;

图17为本公开一些实施例提供的另一种电子设备的示意框图;以及

图18为本公开一些实施例提供的一种存储介质的示意图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

在中央处理器(Central Processing Unit,CPU)/图形处理器(GraphicsProcessing Unit,GPU)软件自动化测试或应用程序调试时,通常需要对程序运行中的关键数据进行记录,例如将内存中的数据存储到持久化存储设备,以便于对问题、缺陷进行事后分析和追溯。在进行事后分析和追溯时,通常需要根据所记录的数据分配内存,并且重建运行数据结构,从而复现运行程序的运行状态,实现应用程序的“回放”运行,以达到复现问题的目的。

图1为内存转储的原理示意图。如图1所示,在CPU/GPU正常运行时,在内存中存储有各类数据,例如命令包、设备代码、设备数据等,这些数据反映了软件或应用程序的运行状态,将这些数据所存储的内存区域称为原始内存区域。当需要对内存中的数据进行记录时,获取原始内存区域中的数据,基于这些数据生成内存转储文件,该内存转储文件记录了原始内存区域中的数据。例如,可以分区域记录数据,将同一个存储分区的数据批量记录,然后将所有存储分区的数据都记录在内存转储文件中。将该内存转储文件进行存储,以便于后续在对问题、缺陷进行分析和追溯时使用。

当需要进行问题、缺陷的分析和追溯时,需要基于内存转储文件进行转储重建,也即,进行内存数据重建。例如,根据内存转储文件中记录的数据,进行内存分配,并将内存转储文件中的数据存储到所分配的内存中,此时存储数据的内存区域被称为镜像内存区域。由此,镜像内存区域中的数据与之前应用程序运行时原始内存区域中的数据相同,镜像内存区域中也存储有命令包、设备代码、设备数据等,从而基于镜像内存区域中的数据可以实现应用程序的“回放”运行,进而复现问题。

通常,内存转储文件采用两种方式存储数据。例如,在一种方式中,可以采用二进制文件方式进行存储,也即是,所有的数据以二进制方式顺序记录在内存转储文件中。这种方式对机器友好,但是数据格式为私有格式,可读性较差,通用性也较差。

在另一种方式中,可以基于标准JSON格式进行存储。例如,采用如图2A所示的简单字符串(simple string)的方式平实(flatten)记录各个内存区域中的数据。图2B为采用这种方式所记录的内存转储文件的数据格式的示例。如图2B所示,各个缓冲区(也即内存区域)中的数据采用平实方式记录,普通数据和指针同等对待。例如,在缓冲区A中,数据D1为指针1,该指针1指向缓冲区B。在缓冲区B中,数据D2为指针2,该指针2指向缓冲区C。缓冲区A、B、C有引用关系,但是在图2B所示的数据结构中无法表达该引用关系。

在进行数据重建时,由于次级缓冲区的地址是动态分配的,因此地址变动需要追溯修改引用者缓冲区(也即上级缓冲区)的相关指针。然而,图2B所示的数据结构不能体现层次关系,这使得追溯引用者缓冲区的过程变得繁杂,需要结合业务逻辑(例如应用层代码)来确定哪些数据为指针。如果脱离业务逻辑,则无法知晓缓冲区中何处数据是指针而需要追溯修改。例如,在脱离业务逻辑时,无法确定出数据D1、D2为指针。

由此可知,采用标准JSON格式进行存储时,会丢失数据结构之间的层次结构,这使得寻找引用者缓冲区比较困难。这种数据结构定义强耦合,解析内存转储文件的数据结构时,需要结合业务数据例如应用包(cp packet)定义格式才能明确哪些数据是指针。这样,在进行数据重建时,会为追溯修改引用者缓冲区的指针带来麻烦,不利于调试软件层次化设计与扩展。

本公开至少一个实施例提供一种内存数据转储方法及装置、内存数据构建方法及装置、电子设备及存储介质。利用该内存数据转储方法得到的内存转储文件的可读性强,数据结构本身能够体现层次关系,数据结构与业务层解耦,不需要与业务逻辑结合便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。

本公开至少一个实施例提供一种内存数据转储方法。该内存数据转储方法包括:获取内存中的多个缓冲区存储的数据,多个缓冲区至少包括第一缓冲区和第二缓冲区,第一缓冲区存储有指向第二缓冲区的第一指针;基于数据建立多个对象结构,多个对象结构至少包括第一对象结构和第二对象结构,第一对象结构表示第一缓冲区中存储的第一数据,第二对象结构表示第二缓冲区中存储的第二数据;根据第一指针表示的引用关系,将第二对象结构嵌套在第一对象结构中,以得到目标对象结构,从而用于生成内存转储文件。目标对象结构包括第一嵌套字段,第一嵌套字段表示第一指针,第一嵌套字段的数据格式及数据内容与第二对象结构的数据格式及数据内容相同。

图3A为本公开一些实施例提供的一种内存数据转储方法的流程示意图。如图3A所示,在一些实施例中,该内存数据转储方法包括如下操作。

步骤S11:获取内存中的多个缓冲区存储的数据,多个缓冲区至少包括第一缓冲区和第二缓冲区,第一缓冲区存储有指向第二缓冲区的第一指针;

步骤S12:基于数据建立多个对象结构,多个对象结构至少包括第一对象结构和第二对象结构,第一对象结构表示第一缓冲区中存储的第一数据,第二对象结构表示第二缓冲区中存储的第二数据;

步骤S13:根据第一指针表示的引用关系,将第二对象结构嵌套在第一对象结构中,以得到目标对象结构,从而用于生成内存转储文件,目标对象结构包括第一嵌套字段,第一嵌套字段表示第一指针,第一嵌套字段的数据格式及数据内容与第二对象结构的数据格式及数据内容相同。

例如,在步骤S11中,当需要进行内存转储时,获取内存中的多个缓冲区存储的数据。由于业务逻辑中通常包括指针,因此内存中也存储有指针。例如,内存中的多个缓冲区至少包括第一缓冲区和第二缓冲区,第一缓冲区存储有指向第二缓冲区的第一指针。此时,该第一指针的字面量(也即,数值)为第二缓冲区的地址,该地址存储在第一缓冲区中。例如,每个缓冲区为一个内存区域,基于指针的引用关系,多个缓冲区之间具有引用的层级关系。例如,各个缓冲区中还存储有实体数据,这些实体数据不是指针,而是表示业务逻辑中的变量、参数等。

例如,在步骤S12中,基于获取的数据建立多个对象结构。这里,对象结构例如为采用预设数据格式的数据结构,至少部分对象结构的预设数据格式为第一数据格式,第一数据格式将在下文描述,此处不再赘述。例如,多个对象结构至少包括第一对象结构和第二对象结构,第一对象结构表示第一缓冲区中存储的第一数据,第二对象结构表示第二缓冲区中存储的第二数据。由此,可以针对各个缓冲区建立对应的对象结构,从而以结构化的方式记录相应的数据。

例如,在步骤S13中,由于第一缓冲区存储有指向第二缓冲区的第一指针,因此根据第一指针表示的引用关系,将对应于第二缓冲区的第二对象结构嵌套在对应于第一缓冲区的第一对象结构中,以得到目标对象结构。例如,目标对象结构为将第二对象结构嵌套在第一对象结构中所得到的对象结构。例如,目的对象结构可用于生成内存转储文件,从而用于后续的数据重建。

例如,目标对象结构包括第一嵌套字段,该第一嵌套字段表示上述第一指针,该第一嵌套字段的数据格式及数据内容与第二对象结构的数据格式及数据内容相同。由此,第一嵌套字段可以清楚地表示第一对象结构与第二对象结构之间的引用关系,进而表示上述第一指针所代表的第一缓冲区与第二缓冲区之间的引用关系。

通过解析目标对象结构,不仅可以获得第一对象结构的数据,还可以根据第一嵌套字段获得第二对象结构的数据以及第一对象结构与第二对象结构之间的引用关系。因此,目标对象结构本身能够体现层次关系,可以直观表达数据间的引用、指向,可读性强,不需要结合业务逻辑便可以获知哪些数据为指针,并可以获知各个缓冲区之间的引用关系,从而使目标对象结构与业务层解耦,不需要与业务逻辑结合便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

例如,如图4A所示,第一对象结构可以采用标准JSON格式,第一缓冲区的数据以数组[sd0, sd1, …, sd(n-1), sdn…]的形式表示。当然,本公开的实施例不限于此,第一对象结构也可以采用下文描述的第一数据格式,这可以根据实际需求而定。例如,当第一对象结构需要被嵌套到其他对象结构中时,可以采用第一数据格式表示第一对象结构,以便于嵌套和体现层级关系。当第一对象结构无需被嵌套到其他对象结构中时,则可以采用标准JSON格式表示第一对象结构,以简化数据结构。

例如,第二对象结构采用第一数据格式,该第一数据格式基于扩展JSON格式得到。

图4B为本公开一些实施例提供的一种内存数据转储方法所采用的第一数据格式的示意图。如图4B所示,第一数据格式包括类型元素和实体元素。类型元素至少包括对象地址、对象标识和地址宽度。例如,在一些示例中,“addr:0x10000000”为对象地址,“tag:100000”为对象标识,“tag_size: 8”为地址宽度。对象地址表示第一数据格式所属的对象结构所对应的缓冲区的地址,也即是,第二对象结构以第一数据格式表示时,该对象地址为第二缓冲区的地址。对象标识表示第一数据格式所属的对象结构的识别号,该识别号例如为预设的编号,并且例如每个对象结构具有唯一的编号,以便于对各个对象结构进行区分和索引。地址宽度表示对象地址的宽度。例如,第一数据格式可以描述一个缓冲区对象,该第一数据格式包含了相邻两层缓冲区的信息,类型元素作为上层缓冲区的数据字段,实体元素作为下层缓冲区的数据内容。

例如,实体元素包括对象地址所指向的缓冲区中存储的数据。也即是,第二对象结构以第一数据格式表示时,第二对象结构中的实体元素为第二缓冲区中存储的数据。例如,在一些示例中,实体元素表示为数组的形式。例如,如图4B所示,多个实体元素以数组[rd0,rd1, …, rd(n-1), rdn…]表示,实体元素rd0、rd1、…rdn均为该数组中的元素。例如,该数组以字面量(也即,数值)的形式记录在第一数据格式中,也即是,各个实体元素的数值依次罗列在第一数据格式中。

例如,第一数据格式以“名称字段:值字段”的形式表示。如图4B所示,{addr:0x10000000, tag:100000, tag_size:8}为名称字段,该名称字段也可以称为第一数据格式所对应的对象结构的标签。例如,[rd0, rd1, …, rd(n-1), rdn…]为值字段,该值字段为第一数据格式所对应的对象结构的主体数组。例如,名称字段包括对象地址、对象标识和地址宽度。对象地址以“对象地址名称:对象地址字面量”的形式表示,例如,“addr”为对象地址名称,“0x10000000”为对象地址字面量,这里,对象地址字面量是指对象地址的数值,也即,指针值。对象标识以“对象标识名称:对象标识字面量”的形式表示,例如,“tag”为对象标识名称,“100000”为对象标识字面量,这里,对象标识字面量是指对象标识的数值。地址宽度以“地址宽度名称:地址宽度字面量”的形式表示,例如,“tag_size”为地址宽度名称,“8”为地址宽度字面量,这里,地址宽度字面量是指地址宽度的数值,也即指针宽度的数值。值字段包括实体元素所组成的数组[rd0, rd1, …, rd(n-1), rdn…]。

例如,假设图4A所示的第一对象结构中的元素sd(n-1)表示第一指针,该第一指针存储在第一缓冲区中并指向第二缓冲区。sd0、sd1、…sdn都表示第一缓冲区中存储的数据,这些数据不是指针。由于第一对象结构表示第一缓冲区中存储的第一数据,第二对象结构表示第二缓冲区中存储的第二数据,因此将第二对象结构作为一个元素嵌套在第一对象结构中,可以得到如图4C所示的目标对象结构。该目标对象结构包括第一嵌套字段,该第一嵌套字段位于元素sd(n-1)的位置且表示第一指针,该第一嵌套字段的数据格式及数据内容与第二对象结构(也即图4B所示的第一数据格式)的数据格式及数据内容相同。

由于具有第一嵌套字段,目标对象结构中表示实体元素的数组为异构数组。该异构数组既包含原始数据,又包含第一嵌套字段。例如,该异构数组的元素包括两种类型,分别为数值型元素和对象结构元素。数值型元素为一个数值,表示原始数据;对象结构元素为前述的第一嵌套字段,表示第一指针。通过解析目标对象结构,可以得到第一缓冲区中存储的第一数据为sd0、sd1、…、sd(n-1)、sdn、…,第二缓冲区中存储的第二数据为rd0、rd1、…、rd(n-1)、rdn、…,第一缓冲区中存储的sd(n-1)为指向第二缓冲区的指针,也即前述的第一指针。

通过上述方式,基于目标对象结构的数据结构本身不仅可以获知第一缓冲区和第二缓冲区各自存储的数据,还可以获知第一缓冲区与第二缓冲区之间的引用关系,仅通过数据结构本身即可确定出第一缓冲区中哪些元素表示指针,而无需结合业务逻辑来确定指针。基于第一数据格式得到的目标对象结构的可读性强,数据格式本身能够体现层次关系,目标对象结构与业务层解耦,不需要与业务逻辑结合便可以进行后续的数据重建,使得数据重建更简单,提升了软件的可扩展性。

例如,在一些示例中,多个缓冲区还可以包括第三缓冲区,第二缓冲区存储有指向第三缓冲区的第二指针。多个对象结构还包括第三对象结构,第三对象结构表示第三缓冲区中存储的第三数据。在该情形中,如图3B所示,本公开实施例提供的内存数据转储方法除了包括步骤S11-S13之外,还可以进一步包括步骤S14。需要说明的是,在实施例中步骤S11-S13与图3A所示的内存数据转储方法的步骤S11-S13基本相同,此处不再赘述。

步骤S14:根据第二指针表示的引用关系,将第三对象结构嵌套在第二对象结构中,以更新第二对象结构。

例如,步骤S14可以在步骤S13之前执行,或者,步骤S14也可以与步骤S13并行执行,这可以根据实际需求而定,本公开的实施例对此不作限制。

例如,在步骤S14中,第三对象结构的数据格式与第一数据格式相同,也即是,第三对象结构也采用第一数据格式表示,从而可以嵌套在第二对象结构中。在该情形中,更新后的第二对象结构中嵌套了第三对象结构,由此最终得到的目标对象结构实现了多级嵌套。例如,目标对象结构不仅包括前述的第一嵌套字段,还包括第二嵌套字段。第二嵌套字段表示第二指针,第二嵌套字段的数据格式及数据内容与第三对象结构的数据格式及数据内容相同。如图4B所示,在一些示例中,第二缓冲区中的实体元素表示为数组[rd0, rd1, …,rd(n-1), rdn…]的形式,假设rd(n-1)为第二嵌套字段,该第二嵌套字段的数据格式与第一数据格式相同,也即,第二嵌套字段也采用第一数据格式表示,第二嵌套字段表示第二缓冲区中存储的第二指针。

例如,第二嵌套字段的数据格式如图4D所示,同样也包括类型元素和实体元素。类型元素至少包括对象地址、对象标识和地址宽度,实体元素包括对象地址所指向的缓冲区中存储的数据。例如,对象地址为“addr:0x10000111”,该对象地址表示第三缓冲区的地址。对象标识为“tag:200000”,地址宽度为“tag_size:8”。实体元素为[zd0, zd1, …,zdn…],这些实体元素为存储在第三缓冲区中的数据。例如,[zd0, zd1, …, zdn…]中的所有元素可以为非指针数据,也可以有一个或多个元素为指向其他缓冲区的指针,以继续进行嵌套。将图4B中的rd(n-1)替换为图4D所示的第二嵌套字段,从而实现了多级嵌套。

基于目标对象结构,不仅可以获知第一缓冲区、第二缓冲区和第三缓冲区各自存储的数据,还可以获知第一缓冲区与第二缓冲区之间的引用关系、第二缓冲区与第三缓冲区之间的引用关系,仅通过数据结构本身即可确定出第一缓冲区所包含的第一指针和第二缓冲区所包含的第二指针,而无需结合业务逻辑来确定指针。需要说明的是,第一指针与第二指针是指内存中的不同指针,并不表示任何重要性和引用顺序。

利用本公开实施例提供的第一数据格式,可以实现逐层、逐级嵌套,使得仅通过解析对象结构的数据结构,即可以获知所有的指针以及相应的数据,可读性强,对象结构与业务层解耦。

需要说明的是,图4A-4D示出的各个类型元素的数值为示例性的,而非限制性的。例如,对象地址可以为内存中实际确定的地址,不限于为0x10000000和0x10000111,可以为32位或64位。地址宽度不限于为8,可以为4、6、10、16等任意位数。对象标识不限于为100000和200000,可以为1、11、101、2、20、203等任意的编号,还可以包含字符和字母。各个类型元素的数值可以根据实际需求而定,本公开的实施例对此不作限制。例如,类型元素还可以进一步包括其他元素,例如属性元素等,属性元素以“属性名称:属性字面量”的形式表示,例如,图4E中的“ptr_mask:FFFFFF00”为属性元素,属性元素可以用于数据对齐或表示其他预设的含义,本公开的实施例对此不作限制。

需要说明的是,在本公开的实施例中,在实现多级嵌套时,所采用的数据格式和嵌套方式是类似的,关于前述的第三对象结构的详细说明可参考关于第二对象结构的说明,关于前述的第二嵌套字段的详细说明可参考关于第一嵌套字段的说明,其原理是类似的,此处不再赘述。

图5为本公开一些实施例提供的目标对象结构的代码示意图。如图5所示,在一些示例中,第一缓冲区中存储的数据分别为0x00002040, …, 0x00000000。第一缓冲区中存储的第二个、第三个数据0x00007f9a3d433200表示第一指针,该第一指针指向第二缓冲区。第二缓冲区中存储的数据分别为0x00000048, …, 0x00007f9a, 0x00000000。第二个缓冲区中存储的倒数第三个、倒数第四个数据0x00007f9a3d433600表示第二指针,该第二指针指向第三缓冲区。第三缓冲区中存储的数据分别为0x00000000, …, 0x00000003。采用第一数据格式建立第二对象结构,用第二对象结构表示第二缓冲区的数据,并将第二对象结构嵌套在第一对象结构中作为第一嵌套字段。同时,采用第一数据格式建立对应于第三缓冲区的第三对象结构,并将该第三对象结构作为第二嵌套字段嵌套在第二对象结构中,以更新第二对象结构。

由此,实现了多级嵌套,得到了目标对象结构。目标对象结构中的第一嵌套字段的数据格式和数据内容与第二对象结构的数据结构和数据内容相同,目标对象结构中的第二嵌套字段的数据格式和数据内容与第三对象结构的数据结构和数据内容相同。目标对象结构涵盖了第一缓冲区、第二缓冲区、第三缓冲区的数据,并且示出了第一指针、第二指针所表示的引用关系,目标对象结构可以清晰地表示数据以及各个缓冲区的层次关系。

图6为本公开一些实施例提供的另一种内存数据转储方法所采用的第一数据格式的示意图。在一些示例中,如图6所示,第一数据格式以多个基本字段的形式表示,多个基本字段分别表示对象地址、对象标识、地址宽度、实体元素,每个基本字段均以“名称:值”的形式表示。例如,基本字段1表示对象地址,基本字段2表示对象标识,基本字段3表示地址宽度,基本字段4表示实体元素。在该示例中,实体元素为9个,分别为1, 2, …, 9,这些实体元素以数组的形式表示。对象地址、对象标识、地址宽度、实体元素各自的表示方式和含义与前述实施例基本相同,仅第一数据格式整体上的格式与前述实施例不同,相同之处可参考前文内容,此处不再赘述。

图7为本公开一些实施例提供的一种内存数据转储方法所采用的第二数据格式的示意图。例如,在一些实施例中,在第一指针在目标对象结构中被多次引用的情形中,当第一指针所表示的引用关系在目标对象结构中再次出现时,也即,非第一次出现时,以引用嵌套字段表示该第一指针。由此,目标对象结构还可以包括引用嵌套字段,引用嵌套字段采用第二数据格式表示。例如,第一指针的第一次引用通过第一数据格式表示,第一指针所表示的引用关系再次出现时则采用第二数据格式表示。如图7所示,第二数据格式包括引用标识元素和内容元素。引用标识元素包括预设字符串,例如该预设字符串可以为&&&,也可以为其他任意的字符串,这可以根据实际需求进行定义,本公开的实施例对此不作限制。内容元素与第一数据格式中的类型元素相同,也即是,内容元素也包括对象地址、对象标识、地址宽度。

相比于第一数据格式,第二数据格式中不包含实体元素,但增加了引用标识元素。通过识别引用标识元素,可以确定该对象结构已经被引用过,因此可以通过对象标识获取到第一次引用对应的对象结构中的实体元素。由此,可以使得指针(例如第一指针)除第一次引用之外的引用可以获取到该指针的第一次引用对应的对象结构中的实体元素。

图8为本公开一些实施例提供的引用嵌套字段的代码示意图。如图8所示,对象标识为200000(“tag: 200000”)的对象结构已经被引用过,因此,当该对象结构被再次引用时,可以采用第二数据格式表示,从而得到引用嵌套字段。通过识别引用标识元素&&&,可以确定这次引用并非第一次引用,因此利用对象标识200000可以索引到之前引用的该对象结构,从而获取到其实体元素a, b, c, d, …, 10, 11, 12。通过这种方式,可以表示多重指针,支持无限多重指针的结构化表示,并且避免重复记录,简化代码,减少代码量。

图9为本公开一些实施例提供的一种内存数据转储方法所采用的第一数据格式的示意图。例如,在一些示例中,如图9所示,表示实体元素的数组以二进制文件的形式链接在第一数据格式中。例如,不再将各个实体元素依次罗列在第一数据格式中,而是采用二进制文件(例如sub_dump_1.dat)记录实体元素,并将二进制文件链接在第一数据格式中。例如,该二进制文件的路径可以采用全局路径,也可以采用相对路径,本公开的实施例对此不作限制。通过这种方式,可以在数据量较大的情形下简化代码,减少代码量,提高可阅读性。需要说明的是,用二进制文件表示实体元素,既可以用于图4B所示的数据格式,也可以用于图4E、图6所示的数据格式,本公开的实施例对此不作限制。

图10为本公开一些实施例提供的另一种内存数据转储方法的流程示意图。例如,在一些示例中,如图10所示,除了包括步骤S11-S13,该实施例提供的内存数据转储方法还进一步包括步骤S15。该实施例中的步骤S11-S13与图3A所示的内存数据转储方法中的步骤S11-S13基本相同,相关说明可参考前述内容,此处不再赘述。

步骤S15:对目标对象结构进行串行化处理,以生成内存转储文件。

例如,在步骤S15中,在得到目标对象结构之后,对目标对象结构进行串行化处理,从而生成内存转储文件。内存转储文件可以存储到持久化存储设备中,以供后续进行问题、缺陷的分析和追溯时使用,例如可使用内存转储文件进行数据重建。关于串行化处理的详细说明可参考常规设计,此处不再详述。

需要说明的是,本公开的实施例中,内存数据转储方法还可以包括更多的步骤,而不限于上文描述的步骤。各个步骤的执行顺序不受限制,可以根据实际需求而定。

本公开至少一个实施例还提供一种内存数据构建方法。利用该内存数据构建方法,可以基于内存转储文件的数据结构获知层次关系,不需要结合业务逻辑便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

图11为本公开一些实施例提供的一种内存数据构建方法的流程示意图。如图11所示,在一些实施例中,该内存数据构建方法包括如下操作。

步骤S21:由内存转储文件得到目标对象结构,并为目标对象结构分配第一缓冲区,目标对象结构包括第一嵌套字段,第一嵌套字段表示第一指针;

步骤S22:基于目标对象结构得到第一对象结构,在第一缓冲区中构建对应于第一对象结构的第一数据,并且为第一嵌套字段分配第二缓冲区,将第二缓冲区的地址存入第一缓冲区中对应于第一嵌套字段的位置,以实现第一指针的引用关系;

步骤S23:基于第一嵌套字段得到第二对象结构,在第二缓冲区中构建对应于第二对象结构的第二数据。

例如,当需要在镜像内存区域中进行数据重建时,可以采用该内存数据构建方法来进行数据重建,从而复现运行程序的运行状态,实现应用程序的“回放”运行,以达到复现问题的目的。

例如,在步骤S21中,内存转储文件可以通过前述的内存数据转储方法得到,通过解析该内存转储文件,可以得到目标对象结构,该目标对象结构可以为图4A至图9所描述的数据格式所表示的对象结构。例如,在一些示例中,该目标对象结构为图4C所示的对象结构,该目标对象结构包括第一嵌套字段,第一嵌套字段表示第一指针。例如,可以为目标对象结构分配内存中的第一缓冲区,第一缓冲区的大小可以根据预设条件确定或者由用户确定。

例如,在步骤S22中,基于目标对象结构得到第一对象结构,也即是,得到如图4A所示的第一对象结构,并在第一缓冲区中构建对应于第一对象结构的第一数据。例如,可以将第一对象结构中的数据sd0, …, sdn存入第一缓冲区。由于存在第一嵌套字段,可以获知存在第一指针,因此需要为第一嵌套字段分配第二缓冲区。由于内存地址是动态分配的,因此需要将第二缓冲区的地址存入第一缓冲区中对应于第一嵌套字段的位置,例如将第二缓冲区的地址存入第一缓冲区中sd(n-1)的位置。由此,可以实现第一指针的引用关系。

例如,在步骤S23中,基于第一嵌套字段得到第二对象结构,例如得到如图4B所示的第二对象结构。得到第二对象结构之后,在第二缓冲区中构建对应于第二对象结构的第二数据,例如将第二对象结构中的数据rd0, …, rdn存入第二缓冲区。

由此,可以在镜像内存区域中构建第一缓冲区中的第一数据和第二缓冲区中的第二数据,使镜像内存区域中的数据与程序之前正常运行时的原始内存区域中的数据相同,从而达到复现的目的。

需要说明的是,本公开的实施例中,内存数据构建方法近似为前述内存数据转储方法的逆过程。例如,前述的内存数据转储方法是基于原始内存区域中各个缓冲区的数据建立目标对象结构,该内存数据构建方法是基于目标对象结构建立镜像内存区域中各个缓冲区的数据。关于目标对象结构、第一对象结构、第二对象结构、第一嵌套字段的说明可参考前述内容,此处不再赘述。

例如,当目标对象结构包括多个层级关系时,可以逐级分配缓冲区并将分配的缓冲区的地址存入上级缓冲区中,其处理方式与第二缓冲区的处理方式基本相同。当某一指针多重引用时,在第一次为该指针分配缓冲区之后,后续引用可以直接使用该缓冲区的地址,而无需再次分配缓冲区。

图12A为图11中步骤S22的一种流程示意图。如图12A所示,在一些示例中,图11中的步骤S22可以进一步包括如下操作。

步骤S221:遍历目标对象结构的实体元素,根据实体元素的数据格式识别实体元素为第一嵌套字段或实体数据;

步骤S222:响应于实体元素为实体数据,将实体数据存入第一缓冲区;

步骤S223:响应于实体元素为第一嵌套字段,将第一嵌套字段中的对象地址存入第一缓冲区;

步骤S224:在为第一嵌套字段分配第二缓冲区之后,将第一缓冲区中存储的对象地址替换为第二缓冲区的地址。

例如,在步骤S221中,遍历目标对象结构的实体元素,并根据实体元素的数据格式识别实体元素为第一嵌套字段或实体数据,以得到第一对象结构。例如,实体数据通常为一个数值,该数值可以为预设位数和预设数值类型,第一嵌套字段为前述的第一数据格式。因此,可以通过数据格式判断各个实体元素是第一嵌套字段或实体数据。

例如,在步骤S222中,若判断某一实体元素为实体数据,则将该实体数据存入第一缓冲区。例如,按照实体数据在第一对象结构的数组中的位置将实体数据存到第一缓冲区中相应的位置。

例如,在步骤S223中,若判断某一实体元素为第一嵌套字段,则将该第一嵌套字段中的对象地址存入第一缓冲区。例如,按照第一嵌套字段在第一对象结构的数组中的位置将第一嵌套字段中的对象地址存到第一缓冲区中相应的位置。需要说明的是,该对象地址为进行内存转储时原始内存区域中相应的缓冲区的地址,并不是镜像内存区域中相应的缓冲区的地址,此时,存入到第一缓冲区的对象地址还不能在镜像内存区域中实现正确的引用关系。

例如,在步骤S224中,在为第一嵌套字段分配第二缓冲区之后,将第一缓冲区中存储的对象地址替换为第二缓冲区的地址。由于内存地址是动态分配的,在为第一嵌套字段分配第二缓冲区之后,可以得到镜像内存区域中第二缓冲区的地址,因此将此前存入第一缓冲区的对象地址替换为第二缓冲区的地址,从而可以实现指针的追溯修改,在镜像内存区域中实现正确的引用关系。

通过上述方式,可以依序对各个缓冲区的数据进行重建,例如建立第一缓冲区的第一数据之后再建立第二缓冲区的第二数据,最后对指针进行追溯修改即可,由此在镜像内存区域中重建数据,使镜像内存区域中的数据与程序之前正常运行时的原始内存区域中的数据相同,从而达到复现的目的。

图12B为图11中步骤S22的另一种流程示意图。如图12B所示,在一些示例中,图11中的步骤S22可以进一步包括如下操作。该示例中的步骤S221、S222与图12A中的步骤S221、S222基本相同,此处不再赘述。

步骤S221:遍历目标对象结构的实体元素,根据实体元素的数据格式识别实体元素为第一嵌套字段或实体数据;

步骤S222:响应于实体元素为实体数据,将实体数据存入第一缓冲区;

步骤S225:在为第一嵌套字段分配第二缓冲区之后,响应于实体元素为第一嵌套字段,将第二缓冲区的地址存入第一缓冲区中对应于第一嵌套字段的位置。

例如,在步骤S225中,若判断某一实体元素为第一嵌套字段,则为该第一嵌套字段分配第二缓冲区,然后将得到的第二缓冲区的地址存入第一缓冲区中对应于第一嵌套字段的位置,从而可以直接将指针存储为实际分配的地址,而无需进行二次修改,由此在镜像内存区域中实现正确的引用关系。

通过上述方式,可以省略对指针进行追溯修改的操作,直接将指针存储为实际分配的地址,对各个缓冲区的数据重建交叉进行,由此在镜像内存区域中重建数据,使镜像内存区域中的数据与程序之前正常运行时的原始内存区域中的数据相同,从而达到复现的目的。

图13为本公开一些实施例提供的另一种内存数据构建方法的流程示意图。例如,在一些示例中,如图13所示,除了包括步骤S21-S23,该实施例提供的内存数据构建方法还进一步包括步骤S24。该实施例中的步骤S21-S23与图11所示的内存数据构建方法中的步骤S21-S23基本相同,相关说明可参考前述内容,此处不再赘述。

步骤S24:进行地址映射,以构建对应于内存转储文件的内存数据。

例如,在步骤S24中,将CPU内存地址映射到GPU地址,并将映射的地址作为输出返回,由此实现内存数据的构建。

需要说明的是,本公开的实施例中,内存数据构建方法还可以包括更多的步骤,而不限于上文描述的步骤。各个步骤的执行顺序不受限制,可以根据实际需求而定。

本公开至少一个实施例还提供一种内存数据转储装置。该内存数据转储装置得到的内存转储文件的可读性强,数据结构本身能够体现层次关系,数据结构与业务层解耦,不需要与业务逻辑结合便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

图14为本公开一些实施例提供的一种内存数据转储装置的示意框图。如图14所示,该内存数据转储装置30包括数据获取单元31、对象结构建立单元32和嵌套单元33。该内存数据转储装置30可以用于进行内存转储。

数据获取单元31配置为获取内存中的多个缓冲区存储的数据。例如,多个缓冲区至少包括第一缓冲区和第二缓冲区,第一缓冲区存储有指向第二缓冲区的第一指针。例如,数据获取单元31可以执行如图3A所示的内存数据转储方法的步骤S11。

对象结构建立单元32配置为基于数据建立多个对象结构。例如,多个对象结构至少包括第一对象结构和第二对象结构,第一对象结构表示第一缓冲区中存储的第一数据,第二对象结构表示第二缓冲区中存储的第二数据。例如,对象结构建立单元32可以执行如图3A所示的内存数据转储方法的步骤S12。

嵌套单元33配置为根据第一指针表示的引用关系,将第二对象结构嵌套在第一对象结构中,以得到目标对象结构,从而用于生成内存转储文件。例如,目标对象结构包括第一嵌套字段,第一嵌套字段表示第一指针,第一嵌套字段的数据格式及数据内容与第二对象结构的数据格式及数据内容相同。例如,嵌套单元33可以执行如图3A所示的内存数据转储方法的步骤S13。

例如,数据获取单元31、对象结构建立单元32和嵌套单元33可以为硬件、软件、固件以及它们的任意可行的组合。例如,数据获取单元31、对象结构建立单元32和嵌套单元33可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于数据获取单元31、对象结构建立单元32和嵌套单元33的具体实现形式,本公开的实施例对此不作限制。

需要说明的是,本公开的实施例中,内存数据转储装置30的各个单元与前述的内存数据转储方法的各个步骤对应,关于该内存数据转储装置30的具体功能可以参考上文中内存数据转储方法的相关描述,此处不再赘述。图14所示的内存数据转储装置30的组件和结构只是示例性的,而非限制性的,根据需要,该内存数据转储装置30还可以包括其他组件和结构。

本公开至少一个实施例还提供一种内存数据构建装置。该内存数据构建装置可以基于内存转储文件的数据结构获知层次关系,不需要结合业务逻辑便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

图15为本公开一些实施例提供的一种内存数据构建装置的示意框图。如图15所示,该内存数据构建装置40包括获取单元41、第一构建单元42和第二构建单元43。该内存数据构建装置40可以用于进行内存数据重建。

获取单元41配置为由内存转储文件得到目标对象结构,并为目标对象结构分配第一缓冲区。例如,目标对象结构包括第一嵌套字段,第一嵌套字段表示第一指针。例如,获取单元41可以执行如图11所示的内存数据构建方法的步骤S21。第一构建单元42配置为基于目标对象结构得到第一对象结构,在第一缓冲区中构建对应于第一对象结构的第一数据,并且为第一嵌套字段分配第二缓冲区,将第二缓冲区的地址存入第一缓冲区中对应于第一嵌套字段的位置,以实现第一指针的引用关系。例如,第一构建单元42可以执行如图11所示的内存数据构建方法的步骤S22。第二构建单元43配置为基于第一嵌套字段得到第二对象结构,在第二缓冲区中构建对应于第二对象结构的第二数据。例如,第二构建单元43可以执行如图11所示的内存数据构建方法的步骤S23。

例如,获取单元41、第一构建单元42和第二构建单元43可以为硬件、软件、固件以及它们的任意可行的组合。例如,获取单元41、第一构建单元42和第二构建单元43可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于获取单元41、第一构建单元42和第二构建单元43的具体实现形式,本公开的实施例对此不作限制。

需要说明的是,本公开的实施例中,内存数据构建装置40的各个单元与前述的内存数据构建方法的各个步骤对应,关于该内存数据构建装置40的具体功能可以参考上文中内存数据构建方法的相关描述,此处不再赘述。图15所示的内存数据构建装置40的组件和结构只是示例性的,而非限制性的,根据需要,该内存数据构建装置40还可以包括其他组件和结构。

本公开至少一个实施例还提供一种电子设备,该电子设备包括本公开任一实施例提供的内存数据转储装置或内存数据构建装置。该电子设备得到的内存转储文件的可读性强,数据结构本身能够体现层次关系,数据结构与业务层解耦,不需要与业务逻辑结合便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

图16为本公开一些实施例提供的一种电子设备的示意框图。如图16所示,电子设备50包括内存数据转储装置51或内存数据构建装置52。例如,内存数据转储装置51可以为图14所示的内存数据转储装置30,内存数据构建装置52可以为图15所示的内存数据构建装置40。关于该电子设备50的相关说明可参考上文中关于内存数据转储装置30和内存数据构建装置40的描述,此处不再赘述。

本公开至少一个实施例还提供一种电子设备,该电子设备包括处理器和存储器,一个或多个计算机程序模块被存储在该存储器中并被配置为由该处理器执行,一个或多个计算机程序模块包括用于实现本公开任一实施例提供的内存数据转储方法或内存数据构建方法。该电子设备得到的内存转储文件的可读性强,数据结构本身能够体现层次关系,数据结构与业务层解耦,不需要与业务逻辑结合便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

图17为本公开一些实施例提供的另一种电子设备的示意框图。如图17所示,该电子设备60包括处理器61和存储器62。存储器62用于存储非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器61用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器61运行时可以执行上文所述的内存数据转储方法或内存数据构建方法中的一个或多个步骤。存储器62和处理器61可以通过总线系统和/或其它形式的连接机构(未示出)互连。

例如,处理器61可以是中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元,例如现场可编程门阵列(FPGA)等;例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器61可以为通用处理器或专用处理器,可以控制电子设备60中的其它组件以执行期望的功能。

例如,存储器62可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器61可以运行一个或多个计算机程序模块,以实现电子设备60的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。

需要说明的是,本公开的实施例中,电子设备60的具体功能和技术效果可以参考上文中关于内存数据转储方法或内存数据构建方法的描述,此处不再赘述。

本公开至少一个实施例还提供一种存储介质,用于存储非暂时性计算机可读指令,当该非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例所述的内存数据转储方法或内存数据构建方法。利用该存储介质得到的内存转储文件的可读性强,数据结构本身能够体现层次关系,数据结构与业务层解耦,不需要与业务逻辑结合便可以进行数据重建,使得数据重建更简单,提升了软件的可扩展性。

图18为本公开一些实施例提供的一种存储介质的示意图。如图18所示,存储介质70用于存储非暂时性计算机可读指令71。例如,当非暂时性计算机可读指令71由计算机执行时可以执行根据上文所述的内存数据转储方法或内存数据构建方法中的一个或多个步骤。

例如,该存储介质70可以应用于上述电子设备中。例如,存储介质70可以为图17所示的电子设备60中的存储器62。例如,关于存储介质70的相关说明可以参考图17所示的电子设备60中的存储器62的相应描述,此处不再赘述。

有以下几点需要说明:

(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。

(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。

技术分类

06120113213189